This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch windres]: Fix binary import of version-info resource


Updated version.  I re-tested it.  Ok for apply?

Regards,
Kai

ChangeLog

2012-11-27  Kai Tietz

	* resbin.c (bin_to_res_version):  Correct offset
	and length calculation of resource.
	(get_version_header): Apply alignement of 4 to len.

Index: resbin.c
===================================================================
RCS file: /cvs/src/src/binutils/resbin.c,v
retrieving revision 1.18
diff -p -u -r1.18 resbin.c
--- resbin.c	11 Oct 2011 15:56:28 -0000	1.18
+++ resbin.c	27 Nov 2012 16:36:52 -0000
@@ -909,7 +909,7 @@ get_version_header (windres_bfd *wrbfd,
   if (length < 8)
     toosmall (key);

-  *len = windres_get_16 (wrbfd, data, 2);
+  *len = (windres_get_16 (wrbfd, data, 2) + 3) & ~3;
   *vallen = windres_get_16 (wrbfd, data + 2, 2);
   *type = windres_get_16 (wrbfd, data + 4, 2);

@@ -1041,10 +1041,7 @@ bin_to_res_version (windres_bfd *wrbfd,
 	  data += off;
 	  length -= off;

-	  /* It's convenient to round verlen to a 4 byte alignment,
-             since we round the subvariables in the loop.  */
-
-	  verlen = (verlen + 3) &~ 3;
+	  verlen -= off;

 	  vi->u.string.stringtables = NULL;
 	  ppvst = &vi->u.string.stringtables;
@@ -1070,7 +1067,7 @@ bin_to_res_version (windres_bfd *wrbfd,
 	      length -= off;
 	      verlen -= off;

-	  stverlen = (stverlen + 3) &~ 3;
+	  stverlen -= off;

 	  vst->strings = NULL;
 	  ppvs = &vst->strings;
@@ -1088,14 +1085,12 @@ bin_to_res_version (windres_bfd *wrbfd,
 	      get_version_header (wrbfd, data, length, (const char *) NULL,
 				  &vs->key, &sverlen, &vallen, &type, &off);

-	      sverlen = (sverlen + 3) &~ 3;
-
 	      data += off;
 	      length -= off;

 	      vs->value = get_unicode (wrbfd, data, length, &vslen);
 	      valoff = vslen * 2 + 2;
-	      valoff = (valoff + 3) &~ 3;
+	      valoff = (valoff + 3) & ~3;

 	      if (off + valoff != sverlen)
 		fatal (_("unexpected version string length %ld != %ld + %ld"),
@@ -1108,6 +1103,7 @@ bin_to_res_version (windres_bfd *wrbfd,
 		fatal (_("unexpected version string length %ld < %ld"),
 		       (long) verlen, (long) sverlen);
 	      stverlen -= sverlen;
+	      verlen -= sverlen;

 	      vs->next = NULL;
 	      *ppvs = vs;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]