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.
This commit is contained in:
Dmitry Timoshkov 2017-01-18 11:40:06 +00:00 committed by Nick Clifton
parent 01fabda4d4
commit 6bb21700ab
4 changed files with 34 additions and 5 deletions

View File

@ -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

View File

@ -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)
{

View File

@ -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

View File

@ -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 ....