mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-26 07:19:16 +08:00
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.
This commit is contained in:
@ -24,6 +24,7 @@
|
||||
#ifdef HAVE_ZLIB_H
|
||||
#include <zlib.h>
|
||||
#endif
|
||||
#include "safe-ctype.h"
|
||||
|
||||
#ifdef HAVE_ZLIB_H
|
||||
static bfd_boolean
|
||||
@ -303,6 +304,15 @@ bfd_is_section_compressed (bfd *abfd, sec_ptr sec)
|
||||
compressed = (bfd_get_section_contents (abfd, sec, compressed_buffer, 0, 12)
|
||||
&& CONST_STRNEQ ((char*) compressed_buffer, "ZLIB"));
|
||||
|
||||
/* Check for the pathalogical case of a debug string section that
|
||||
contains the string ZLIB.... as the first entry. We assume that
|
||||
no uncompressed .debug_str section would ever be big enough to
|
||||
have the first byte of its (big-endian) size be non-zero. */
|
||||
if (compressed
|
||||
&& strcmp (sec->name, ".debug_str") == 0
|
||||
&& ISPRINT (compressed_buffer[4]))
|
||||
compressed = FALSE;
|
||||
|
||||
/* Restore compress_status. */
|
||||
sec->compress_status = saved;
|
||||
return compressed;
|
||||
|
Reference in New Issue
Block a user