diff options
Diffstat (limited to 'bfd/pef.c')
-rw-r--r-- | bfd/pef.c | 40 |
1 files changed, 17 insertions, 23 deletions
@@ -446,14 +446,15 @@ bfd_pef_print_loader_section (bfd *abfd, FILE *file) return -1; loaderlen = loadersec->size; - loaderbuf = bfd_malloc (loaderlen); + if (loaderlen < 56) + return -1; + if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0) + return -1; + loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen); if (loaderbuf == NULL) return -1; - if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0 - || bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen - || loaderlen < 56 - || bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0) + if (bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0) { free (loaderbuf); return -1; @@ -479,17 +480,14 @@ bfd_pef_scan_start_address (bfd *abfd) goto end; loaderlen = loadersec->size; - loaderbuf = bfd_malloc (loaderlen); - if (loaderbuf == NULL) - goto end; - - if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0) + if (loaderlen < 56) goto error; - if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen) + if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0) goto error; - - if (loaderlen < 56) + loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen); + if (loaderbuf == NULL) goto error; + ret = bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header); if (ret < 0) goto error; @@ -903,12 +901,10 @@ bfd_pef_parse_symbols (bfd *abfd, asymbol **csym) if (codesec != NULL) { codelen = codesec->size; - codebuf = bfd_malloc (codelen); - if (codebuf == NULL) - goto end; - if (bfd_seek (abfd, codesec->filepos, SEEK_SET) < 0) + if (bfd_seek (abfd, codesec->filepos, SEEK_SET) != 0) goto end; - if (bfd_bread ((void *) codebuf, codelen, abfd) != codelen) + codebuf = _bfd_malloc_and_read (abfd, codelen, codelen); + if (codebuf == NULL) goto end; } @@ -916,12 +912,10 @@ bfd_pef_parse_symbols (bfd *abfd, asymbol **csym) if (loadersec != NULL) { loaderlen = loadersec->size; - loaderbuf = bfd_malloc (loaderlen); - if (loaderbuf == NULL) + if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0) goto end; - if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0) - goto end; - if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen) + loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen); + if (loaderbuf == NULL) goto end; } |