Handle CRLF when reading XML on Windows

xml-support.c uses FOPEN_RT, but then reads the entire contents of the
file and verifies that the number of bytes read matches the length.
This can fail on Windows, where the read will translate line
terminators.

This patch fixes the bug by changing xml-support.c to use FOPEN_RB.
This works because expat correctly handles \r\n line terminators.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tromey@adacore.com>

	* xml-support.c (xml_fetch_content_from_file): Use FOPEN_RB.

gdb/testsuite/ChangeLog
2019-12-11  Tom Tromey  <tromey@adacore.com>

	* gdb.xml/tdesc-arch.exp (set_arch): Add "trans_mode" parameter.
	Add crlf test.

Change-Id: I548438f33eed284dde1de8babf755eaa1a40319d
This commit is contained in:
Tom Tromey 2019-12-10 11:44:36 -07:00
parent 228c8f4be0
commit f69656d00f
4 changed files with 22 additions and 5 deletions

View File

@ -1,3 +1,7 @@
2019-12-11 Tom Tromey <tromey@adacore.com>
* xml-support.c (xml_fetch_content_from_file): Use FOPEN_RB.
2019-12-18 Tom Tromey <tromey@adacore.com>
PR build/25268:

View File

@ -1,3 +1,8 @@
2019-12-11 Tom Tromey <tromey@adacore.com>
* gdb.xml/tdesc-arch.exp (set_arch): Add "trans_mode" parameter.
Add crlf test.
2019-12-18 Simon Marchi <simon.marchi@efficios.com>
* gdb.base/default.exp: Update value of $_gdb_major.

View File

@ -55,13 +55,16 @@ if { "$arch1" == "" || "$arch2" == "" || "$default_arch" == "" } {
# Run these tests twice, once for $arch1 and once for $arch2, to
# make sure that the tdesc file overrides the global default.
# TRANS_MODE indicates how newlines should be represented; it should
# be one of the values supported by "fconfigure -translation".
proc set_arch { arch which } {
proc set_arch { arch which trans_mode } {
global gdb_prompt
global subdir
set filename [standard_output_file tdesc-arch.xml]
set fd [open $filename w]
fconfigure $fd -translation $trans_mode
puts $fd \
"<target>
<architecture>$arch</architecture>
@ -92,8 +95,13 @@ proc set_arch { arch which } {
remote_file host delete $filename
}
set_arch $arch1 first
set_arch $arch2 second
set_arch $arch1 first lf
set_arch $arch2 second lf
with_test_prefix crlf {
set_arch $arch1 first crlf
set_arch $arch2 second crlf
}
# Check an invalid architecture setting.
set filename [standard_output_file tdesc-arch.xml]

View File

@ -977,11 +977,11 @@ xml_fetch_content_from_file (const char *filename, void *baton)
{
char *fullname = concat (dirname, "/", filename, (char *) NULL);
file = gdb_fopen_cloexec (fullname, FOPEN_RT);
file = gdb_fopen_cloexec (fullname, FOPEN_RB);
xfree (fullname);
}
else
file = gdb_fopen_cloexec (filename, FOPEN_RT);
file = gdb_fopen_cloexec (filename, FOPEN_RB);
if (file == NULL)
return {};