This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
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;