2009-03-12 Andrew Stubbs <ams@codesourcery.com>

* dwarf2.c (read_section): Always check the offset, even when the
	section has been read before.
This commit is contained in:
Andrew Stubbs
2009-03-12 10:57:18 +00:00
parent e671f9d32e
commit 53638231ad
2 changed files with 43 additions and 38 deletions

View File

@ -1,3 +1,8 @@
2009-03-12 Andrew Stubbs <ams@codesourcery.com>
* dwarf2.c (read_section): Always check the offset, even when the
section has been read before.
2009-03-11 H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (elf_i386_check_tls_transition): Fix a typo in

View File

@ -417,49 +417,49 @@ read_section (bfd * abfd,
bfd_boolean section_is_compressed = FALSE;
/* read_section is a noop if the section has already been read. */
if (*section_buffer)
return TRUE;
msec = bfd_get_section_by_name (abfd, section_name);
if (! msec && compressed_section_name)
if (!*section_buffer)
{
msec = bfd_get_section_by_name (abfd, compressed_section_name);
section_is_compressed = TRUE;
}
if (! msec)
{
(*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."), section_name);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
if (syms)
{
*section_size = msec->size;
*section_buffer
= bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms);
if (! *section_buffer)
return FALSE;
}
else
{
*section_size = msec->rawsize ? msec->rawsize : msec->size;
*section_buffer = bfd_malloc (*section_size);
if (! *section_buffer)
return FALSE;
if (! bfd_get_section_contents (abfd, msec, *section_buffer,
0, *section_size))
return FALSE;
}
if (section_is_compressed)
{
if (! bfd_uncompress_section_contents (section_buffer, section_size))
msec = bfd_get_section_by_name (abfd, section_name);
if (! msec && compressed_section_name)
{
(*_bfd_error_handler) (_("Dwarf Error: unable to decompress %s section."), compressed_section_name);
msec = bfd_get_section_by_name (abfd, compressed_section_name);
section_is_compressed = TRUE;
}
if (! msec)
{
(*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."), section_name);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
if (syms)
{
*section_size = msec->size;
*section_buffer
= bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms);
if (! *section_buffer)
return FALSE;
}
else
{
*section_size = msec->rawsize ? msec->rawsize : msec->size;
*section_buffer = bfd_malloc (*section_size);
if (! *section_buffer)
return FALSE;
if (! bfd_get_section_contents (abfd, msec, *section_buffer,
0, *section_size))
return FALSE;
}
if (section_is_compressed)
{
if (! bfd_uncompress_section_contents (section_buffer, section_size))
{
(*_bfd_error_handler) (_("Dwarf Error: unable to decompress %s section."), compressed_section_name);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
}
}
/* It is possible to get a bad value for the offset into the section