aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2014-04-30 17:04:04 +0100
committerNick Clifton <nickc@redhat.com>2014-04-30 17:04:04 +0100
commita953eec996f2f93914cc78d68d4478a2660432b6 (patch)
treecfee3d9c40c75de51ab05c29e44fb241dcc836da /binutils
parent1cfdf5340af6f07bb44b97c278f7036ef8db5c43 (diff)
downloadgdb-a953eec996f2f93914cc78d68d4478a2660432b6.zip
gdb-a953eec996f2f93914cc78d68d4478a2660432b6.tar.gz
gdb-a953eec996f2f93914cc78d68d4478a2660432b6.tar.bz2
Fixes a problem with the BFD library running out of memory because it mistakenly
thought that an uncompressed .debug_str section was compressed. * compress.c (bfd_is_section_compressed): When checking the .debug_str section, also check the fifth byte in the section is not part of a string. * binutils-all/debug_str.s: New test. * binutils-all/debug_str.d: New test control file. * binutils-all/compress.exp: Run debug_str test.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/testsuite/ChangeLog6
-rw-r--r--binutils/testsuite/binutils-all/compress.exp10
-rw-r--r--binutils/testsuite/binutils-all/debug_str.d9
-rw-r--r--binutils/testsuite/binutils-all/debug_str.s12
4 files changed, 37 insertions, 0 deletions
diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog
index a308b63..1231a24 100644
--- a/binutils/testsuite/ChangeLog
+++ b/binutils/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-04-30 Nick Clifton <nickc@redhat.com>
+
+ * binutils-all/debug_str.s: New test.
+ * binutils-all/debug_str.d: New test control file.
+ * binutils-all/compress.exp: Run debug_str test.
+
2014-04-22 Christian Svensson <blue@cmd.nu>
* binutils-all/objcopy.exp: Remove openrisc and or32 support. Add
diff --git a/binutils/testsuite/binutils-all/compress.exp b/binutils/testsuite/binutils-all/compress.exp
index 570425b..d74555d 100644
--- a/binutils/testsuite/binutils-all/compress.exp
+++ b/binutils/testsuite/binutils-all/compress.exp
@@ -173,3 +173,13 @@ if ![string match "" $got] then {
fail "objcopy ($testname)"
}
}
+
+if ![is_remote host] {
+ set tempfile tmpdir/debug_str.o
+ set copyfile tmpdir/debug_str.copy
+} else {
+ set tempfile [remote_download host tmpdir/debug_str.o]
+ set copyfile debug_str.copy
+}
+
+run_dump_test "debug_str"
diff --git a/binutils/testsuite/binutils-all/debug_str.d b/binutils/testsuite/binutils-all/debug_str.d
new file mode 100644
index 0000000..eda1db1
--- /dev/null
+++ b/binutils/testsuite/binutils-all/debug_str.d
@@ -0,0 +1,9 @@
+#PROG: objcopy
+#source: debug_str.s
+#objdump: -h
+#name: Uncompressed .debug_str section starting with ZLIB
+
+.*ebug_str.copy.o: file format .*
+#...
+ . .debug_str 0+01. 0+0 0+0 0+0.. 2..0
+#...
diff --git a/binutils/testsuite/binutils-all/debug_str.s b/binutils/testsuite/binutils-all/debug_str.s
new file mode 100644
index 0000000..485d0cc
--- /dev/null
+++ b/binutils/testsuite/binutils-all/debug_str.s
@@ -0,0 +1,12 @@
+/* This test is derived from a C source file which, when compiled by gcc
+ with debugging enabled, managed to create a .debug_str section whose
+ first string was ZLIB_VER_SUBVERSION. The code in bfd/compress.c
+ used to just check for the characters "ZLIB" at the start of a section
+ and then assume that the section was compressed. This meant that the BFD
+ library then processed the next 8 bytes as if they were the size of the
+ decompressed version of the section. Naturally with this test case the
+ resulting size was gigantic and consequently the library quickly ran out
+ of memory. */
+
+ .section .debug_str,"MS",@progbits,1
+ .string "ZLIB_VER_SUBREVISION 0"