count zero.  Check that offset and count are within section.
	* libbfd.c (_bfd_generic_get_section_contents): Check that
	offset + count does not overflow.
 2007-07-26  Alan Modra  <amodra@bigpond.net.au>
 
+       * srec.c (srec_get_section_contents): Return immediately on
+       count zero.  Check that offset and count are within section.
+       * libbfd.c (_bfd_generic_get_section_contents): Check that
+       offset + count does not overflow.
+
        * srec.c (srec_canonicalize_symtab): Don't alloc when symcount
        is zero.  Correct return value on error.
        * mmo.c (mmo_canonicalize_symtab): Likewise.
 
     return TRUE;
 
   sz = section->rawsize ? section->rawsize : section->size;
-  if (offset + count > sz)
+  if (offset + count < count
+      || offset + count > sz)
     {
       bfd_set_error (bfd_error_invalid_operation);
       return FALSE;
 
                           file_ptr offset,
                           bfd_size_type count)
 {
+  if (count == 0)
+    return TRUE;
+
+  if (offset + count < count
+      || offset + count > section->size)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return FALSE;
+    }
+
   if (section->used_by_bfd == NULL)
     {
       section->used_by_bfd = bfd_alloc (abfd, section->size);
-      if (section->used_by_bfd == NULL && section->size != 0)
+      if (section->used_by_bfd == NULL)
        return FALSE;
 
       if (! srec_read_section (abfd, section, section->used_by_bfd))