summaryrefslogtreecommitdiff
path: root/bfd/syms.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-12-07 23:39:42 +1030
committerAlan Modra <amodra@gmail.com>2018-12-08 00:11:16 +1030
commitc2f5dc30afa34696f2da0081c4ac50b958ecb0e9 (patch)
tree2dd48a0c34c7f6284e565185c0165ddffd3a86d6 /bfd/syms.c
parentaf03af8f55f2536b6e20928e6b1fa0324a5f3d6e (diff)
downloadbinutils-gdb-c2f5dc30afa34696f2da0081c4ac50b958ecb0e9.tar.gz
PR23952, memory leak in _bfd_generic_read_minisymbols
bfd/ PR 23952 * syms.c (_bfd_generic_read_minisymbols): Free syms before returning with zero symcount. binutils/ * nm.c (display_rel_file): Use xrealloc to increase minisyms for synthetic symbols.
Diffstat (limited to 'bfd/syms.c')
-rw-r--r--bfd/syms.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/bfd/syms.c b/bfd/syms.c
index e09640ab74a..cbf85cb16d7 100644
--- a/bfd/syms.c
+++ b/bfd/syms.c
@@ -822,9 +822,16 @@ _bfd_generic_read_minisymbols (bfd *abfd,
if (symcount < 0)
goto error_return;
- *minisymsp = syms;
- *sizep = sizeof (asymbol *);
-
+ if (symcount == 0)
+ /* We return 0 above when storage is 0. Exit in the same state
+ here, so as to not complicate callers with having to deal with
+ freeing memory for zero symcount. */
+ free (syms);
+ else
+ {
+ *minisymsp = syms;
+ *sizep = sizeof (asymbol *);
+ }
return symcount;
error_return: