This is the mail archive of the binutils-cvs@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]

[binutils-gdb] Stop the (optional) dialong control data from being aligned when parsing/writing windows resource fi


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6bb21700abb61cdb62a3d9fdf417971d528d5a37

commit 6bb21700abb61cdb62a3d9fdf417971d528d5a37
Author: Dmitry Timoshkov <dmitry@baikal.ru>
Date:   Wed Jan 18 11:40:06 2017 +0000

    Stop the (optional) dialong control data from being aligned when parsing/writing windows resource files.
    
    binutils* resbin.c: Optional dialog control data immediately follow
    	the control description without alignment.
    	* testsuite/binutils-all/windres/controldata.rc: New test.
    	source.
    	* testsuite/binutils-all/windres/controldata.rsd: New test.

Diff:
---
 binutils/ChangeLog                                     |  8 ++++++++
 binutils/resbin.c                                      |  7 ++-----
 binutils/testsuite/binutils-all/windres/controldata.rc |  6 ++++++
 .../testsuite/binutils-all/windres/controldata.rsd     | 18 ++++++++++++++++++
 4 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 16e9c60..4c89edc 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,11 @@
+2017-01-17  Dmitry Timoshkov  <dmitry@baikal.ru>
+
+	* resbin.c: Optional dialog control data immediately follows
+	the control description without alignment.
+	* testsuite/binutils-all/windres/controldata.rc: New test.
+	source.
+	* testsuite/binutils-all/windres/controldata.rsd: New test.
+
 2017-01-12  Nick Clifton  <nickc@redhat.com>
 
 	PR binutils/20876
diff --git a/binutils/resbin.c b/binutils/resbin.c
index f836a5a..07bce49 100644
--- a/binutils/resbin.c
+++ b/binutils/resbin.c
@@ -574,8 +574,6 @@ bin_to_res_dialog (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length
 	dc->data = NULL;
       else
 	{
-	  off = (off + 3) &~ 3;
-
 	  if (length < off + datalen)
 	    toosmall (_("dialog control data"));
 
@@ -1582,7 +1580,6 @@ res_to_bin_dialog (windres_bfd *wrbfd, rc_uint_type off, const rc_dialog *dialog
 	{
 	  rc_uint_type saved_off = off;
 	  rc_uint_type old_off;
-	  off += (4 - ((off - off_delta) & 3)) & 3;
 
 	  old_off = off;
 	  off = res_to_bin_rcdata (wrbfd, off, dc->data);
@@ -1590,10 +1587,10 @@ res_to_bin_dialog (windres_bfd *wrbfd, rc_uint_type off, const rc_dialog *dialog
 	    old_off = off = saved_off;
 	  if (wrbfd)
 	    windres_put_16 (wrbfd, dc_rclen, off - old_off);
-	    }
+	}
       if (wrbfd)
 	set_windres_bfd_content (wrbfd, dc_rclen, marker, 2);
-	}
+    }
 
   if (wrbfd)
     {
diff --git a/binutils/testsuite/binutils-all/windres/controldata.rc b/binutils/testsuite/binutils-all/windres/controldata.rc
new file mode 100644
index 0000000..67b8df2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/controldata.rc
@@ -0,0 +1,6 @@
+1 DIALOGEX DISCARDABLE 0, 0, 200, 150
+STYLE 0
+BEGIN
+  CONTROL "evenlengthtext", -1, "TESTCONTROL", 0x50810000, 10,10,100,50 { 1,2,3,4,5 }
+  CONTROL "oddlengthtext", -1, "TESTCONTROL", 0x50810000, 10,60,100,50 { 1,2,3,4,5 }
+END
diff --git a/binutils/testsuite/binutils-all/windres/controldata.rsd b/binutils/testsuite/binutils-all/windres/controldata.rsd
new file mode 100644
index 0000000..1357e05
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/controldata.rsd
@@ -0,0 +1,18 @@
+ 0000 00000000 20000000 ffff0000 ffff0000  .... ...........
+ 0010 00000000 00000000 00000000 00000000  ................
+ 0020 d4000000 20000000 ffff0500 ffff0100  .... ...........
+ 0030 00000000 30100904 00000000 00000000  ....0...........
+ 0040 0100ffff 00000000 00000000 00000000  ................
+ 0050 02000000 0000c800 96000000 00000000  ................
+ 0060 00000000 00000000 00008150 0a000a00  ...........P....
+ 0070 64003200 ffffffff 54004500 53005400  d.2.....T.E.S.T.
+ 0080 43004f00 4e005400 52004f00 4c000000  C.O.N.T.R.O.L...
+ 0090 65007600 65006e00 6c006500 6e006700  e.v.e.n.l.e.n.g.
+ 00a0 74006800 74006500 78007400 00000a00  t.h.t.e.x.t.....
+ 00b0 01000200 03000400 05000000 00000000  ................
+ 00c0 00000000 00008150 0a003c00 64003200  .......P..<.d.2.
+ 00d0 ffffffff 54004500 53005400 43004f00  ....T.E.S.T.C.O.
+ 00e0 4e005400 52004f00 4c000000 6f006400  N.T.R.O.L...o.d.
+ 00f0 64006c00 65006e00 67007400 68007400  d.l.e.n.g.t.h.t.
+ 0100 65007800 74000000 0a000100 02000300  e.x.t...........
+ 0110 04000500                             ....


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