[mingw-binutils] Backported patch unexpected version string length error in windres (RHBZ #902960)

Erik van Pienbroek epienbro at fedoraproject.org
Tue Jan 22 20:04:09 UTC 2013


commit 21c00241c50b8addb3b081e01ac82aff3110a4b0
Author: Erik van Pienbroek <epienbro at fedoraproject.org>
Date:   Tue Jan 22 21:03:56 2013 +0100

    Backported patch unexpected version string length error in windres (RHBZ #902960)

 ...-260cd95271cdf002ed8e419898fd29c42e257841.patch |   69 ++++++++++++++++++++
 mingw-binutils.spec                                |   12 +++-
 2 files changed, 79 insertions(+), 2 deletions(-)
---
diff --git a/binutils.git-260cd95271cdf002ed8e419898fd29c42e257841.patch b/binutils.git-260cd95271cdf002ed8e419898fd29c42e257841.patch
new file mode 100644
index 0000000..de2b121
--- /dev/null
+++ b/binutils.git-260cd95271cdf002ed8e419898fd29c42e257841.patch
@@ -0,0 +1,69 @@
+From: Kai Tietz <kai.tietz at onevision.com>
+Date: Wed, 28 Nov 2012 15:53:37 +0000 (+0000)
+Subject:         * resbin.c (bin_to_res_version):  Correct offset
+X-Git-Tag: binutils_latest_snapshot~48
+X-Git-Url: http://sourceware.org/git/?p=binutils.git;a=commitdiff_plain;h=260cd95271cdf002ed8e419898fd29c42e257841
+
+    * resbin.c (bin_to_res_version):  Correct offset
+        and length calculation of resource.
+        (get_version_header): Apply alignement of 4 to len.
+---
+
+diff --git a/binutils/resbin.c b/binutils/resbin.c
+index b5dcd9b..548ff38 100644
+--- a/binutils/resbin.c
++++ b/binutils/resbin.c
+@@ -909,7 +909,7 @@ get_version_header (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type lengt
+   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, const bfd_byte *data, rc_uint_type lengt
+ 	  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, const bfd_byte *data, rc_uint_type lengt
+ 	      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, const bfd_byte *data, rc_uint_type lengt
+ 	      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, const bfd_byte *data, rc_uint_type lengt
+ 		fatal (_("unexpected version string length %ld < %ld"),
+ 		       (long) verlen, (long) sverlen);
+ 	      stverlen -= sverlen;
++	      verlen -= sverlen;
+ 
+ 	      vs->next = NULL;
+ 	      *ppvs = vs;
diff --git a/mingw-binutils.spec b/mingw-binutils.spec
index 20d4a4c..2c1601c 100644
--- a/mingw-binutils.spec
+++ b/mingw-binutils.spec
@@ -2,7 +2,7 @@
 
 Name:           mingw-binutils
 Version:        2.23.51.0.5
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        Cross-compiled version of binutils for Win32 and Win64 environments
 
 License:        GPLv2+ and LGPLv2+ and GPLv3+ and LGPLv3+
@@ -22,7 +22,11 @@ BuildRequires:  mingw64-filesystem >= 95
 BuildRequires:  dejagnu
 BuildRequires:  sharutils
 %endif
-Provides: bundled(libiberty)
+Provides:       bundled(libiberty)
+
+# Resolves: *-mingw32-windres: unexpected version string length 68 != 32 + 8
+# https://bugzilla.redhat.com/show_bug.cgi?id=902960
+Patch0:         binutils.git-260cd95271cdf002ed8e419898fd29c42e257841.patch
 
 
 %description
@@ -61,6 +65,7 @@ understand Windows executables and DLLs.
 
 %prep
 %setup -q -n binutils-%{version}
+%patch0 -p1
 
 
 %build
@@ -247,6 +252,9 @@ rm -rf $RPM_BUILD_ROOT/multilib
 
 
 %changelog
+* Tue Jan 22 2013 Erik van Pienbroek <epienbro at fedoraproject.org> - 2.23.51.0.5-3
+- Backported patch to fix 'unexpected version string length' error in windres (RHBZ #902960)
+
 * Tue Nov 27 2012 Erik van Pienbroek <epienbro at fedoraproject.org> - 2.23.51.0.5-2
 - Added BR: zlib-devel to enable support for compressed debug sections
 


More information about the scm-commits mailing list