{
bfd_size_type sz;
- if (section->flags & SEC_CONSTRUCTOR)
+ if (count == 0)
+ /* Don't bother. */
+ return true;
+
+ if (section == NULL)
{
- memset (location, 0, (size_t) count);
- return true;
+ bfd_set_error (bfd_error_bad_value);
+ return false;
}
- sz = bfd_get_section_limit_octets (abfd, section);
- if ((bfd_size_type) offset > sz
- || count > sz - offset
- || count != (size_t) count)
+ if (location == NULL)
{
+ if (section->mmapped_p)
+ {
+ /* Pass this request straight on to the target's function.
+ All of the code below assumes that location != NULL.
+ FIXME: Should we still check that count is sane ? */
+ return BFD_SEND (abfd, _bfd_get_section_contents,
+ (abfd, section, location, offset, count));
+ }
+
bfd_set_error (bfd_error_bad_value);
return false;
}
- if (count == 0)
- /* Don't bother. */
- return true;
+ if (section->flags & SEC_CONSTRUCTOR)
+ {
+ memset (location, 0, (size_t) count);
+ return true;
+ }
if ((section->flags & SEC_HAS_CONTENTS) == 0)
{
return true;
}
+ if (abfd == NULL)
+ return false;
+
+ sz = bfd_get_section_limit_octets (abfd, section);
+ if ((bfd_size_type) offset > sz
+ || count > sz - offset
+ || count != (size_t) count)
+ {
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
if ((section->flags & SEC_IN_MEMORY) != 0)
{
if (section->contents == NULL)
return false;
}
+ if (sec->bfd_section == NULL)
+ {
+ /* See PR 31843 for an example of this. */
+ dinfo->fprintf_func (dinfo->stream, _("The ME-Config section is corrupt."));
+ return false;
+ }
+
for (roff = 0; (bfd_size_type) roff < sec->sh_size;
roff += sec->sh_entsize, menum_linear++)
{