Add multi-target tests
[deliverable/binutils-gdb.git] / bfd / pef.c
index effa076405310933f21bea67786b2e3e9eec9784..574d9bcb5d6361b8002e28945efc75a7cdf347a6 100644 (file)
--- a/bfd/pef.c
+++ b/bfd/pef.c
@@ -1,5 +1,5 @@
 /* PEF support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -221,15 +221,16 @@ bfd_pef_print_symbol (bfd *abfd,
       fprintf (file, " %-5s %s", symbol->section->name, symbol->name);
       if (CONST_STRNEQ (symbol->name, "__traceback_"))
        {
-         unsigned char *buf = xmalloc (symbol->udata.i);
+         unsigned char *buf;
          size_t offset = symbol->value + 4;
          size_t len = symbol->udata.i;
-         int ret;
 
-         bfd_get_section_contents (abfd, symbol->section, buf, offset, len);
-         ret = bfd_pef_parse_traceback_table (abfd, symbol->section, buf,
-                                              len, 0, NULL, file);
-         if (ret < 0)
+         buf = bfd_malloc (len);
+         if (buf == NULL
+             || !bfd_get_section_contents (abfd, symbol->section, buf,
+                                           offset, len)
+             || bfd_pef_parse_traceback_table (abfd, symbol->section, buf,
+                                               len, 0, NULL, file) < 0)
            fprintf (file, " [ERROR]");
          free (buf);
        }
@@ -446,6 +447,8 @@ bfd_pef_print_loader_section (bfd *abfd, FILE *file)
 
   loaderlen = loadersec->size;
   loaderbuf = bfd_malloc (loaderlen);
+  if (loaderbuf == NULL)
+    return -1;
 
   if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0
       || bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen
@@ -477,6 +480,9 @@ bfd_pef_scan_start_address (bfd *abfd)
 
   loaderlen = loadersec->size;
   loaderbuf = bfd_malloc (loaderlen);
+  if (loaderbuf == NULL)
+    goto end;
+
   if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0)
     goto error;
   if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen)
@@ -752,6 +758,8 @@ bfd_pef_parse_function_stubs (bfd *abfd,
     (header.imported_library_count * sizeof (bfd_pef_imported_library));
   imports = bfd_malloc
     (header.total_imported_symbol_count * sizeof (bfd_pef_imported_symbol));
+  if (libraries == NULL || imports == NULL)
+    goto error;
 
   if (loaderlen < (56 + (header.imported_library_count * 24)))
     goto error;
@@ -798,7 +806,7 @@ bfd_pef_parse_function_stubs (bfd *abfd,
          codepos += 4;
        }
 
-      if ((codepos + 4) > codelen)
+      if ((codepos + 24) > codelen)
        break;
 
       ret = bfd_pef_parse_function_stub (abfd, codebuf + codepos, 24, &sym_index);
@@ -896,6 +904,8 @@ bfd_pef_parse_symbols (bfd *abfd, asymbol **csym)
     {
       codelen = codesec->size;
       codebuf = bfd_malloc (codelen);
+      if (codebuf == NULL)
+       goto end;
       if (bfd_seek (abfd, codesec->filepos, SEEK_SET) < 0)
        goto end;
       if (bfd_bread ((void *) codebuf, codelen, abfd) != codelen)
@@ -907,6 +917,8 @@ bfd_pef_parse_symbols (bfd *abfd, asymbol **csym)
     {
       loaderlen = loadersec->size;
       loaderbuf = bfd_malloc (loaderlen);
+      if (loaderbuf == NULL)
+       goto end;
       if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0)
        goto end;
       if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen)
This page took 0.026379 seconds and 4 git commands to generate.