From 2ab626aa69ee9548aa947d0ab25381bc1305fcf9 Mon Sep 17 00:00:00 2001 From: Matthias Klose Date: Fri, 8 Dec 2017 11:41:16 +0000 Subject: [PATCH] ld-merge-fix # DP: Fail when string merge can't alloc memory, taken from the trunk. 2017-09-29 Alan Modra * merge.c (merge_strings): Return FALSE on malloc failure. (_bfd_merge_sections): Return failures from record_section and merge_strings. Gbp-Pq: Name ld-merge-fix.diff --- bfd/merge.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/bfd/merge.c b/bfd/merge.c index 553de8eae..abd3d9e04 100644 --- a/bfd/merge.c +++ b/bfd/merge.c @@ -609,7 +609,7 @@ is_suffix (const struct sec_merge_hash_entry *A, /* This is a helper function for _bfd_merge_sections. It attempts to merge strings matching suffixes of longer strings. */ -static void +static bfd_boolean merge_strings (struct sec_merge_info *sinfo) { struct sec_merge_hash_entry **array, **a, *e; @@ -621,7 +621,7 @@ merge_strings (struct sec_merge_info *sinfo) amt = sinfo->htab->size * sizeof (struct sec_merge_hash_entry *); array = (struct sec_merge_hash_entry **) bfd_malloc (amt); if (array == NULL) - goto alloc_failure; + return FALSE; for (e = sinfo->htab->first, a = array; e; e = e->next) if (e->alignment) @@ -666,9 +666,7 @@ merge_strings (struct sec_merge_info *sinfo) } } -alloc_failure: - if (array) - free (array); + free (array); /* Now assign positions to the strings we want to keep. */ size = 0; @@ -714,6 +712,7 @@ alloc_failure: e->u.index = e->u.suffix->u.index + (e->u.suffix->len - e->len); } } + return TRUE; } /* This function is called once after all SEC_MERGE sections are registered @@ -748,7 +747,7 @@ _bfd_merge_sections (bfd *abfd, (*remove_hook) (abfd, secinfo->sec); } else if (! record_section (sinfo, secinfo)) - break; + return FALSE; if (secinfo) continue; @@ -757,7 +756,10 @@ _bfd_merge_sections (bfd *abfd, continue; if (sinfo->htab->strings) - merge_strings (sinfo); + { + if (!merge_strings (sinfo)) + return FALSE; + } else { struct sec_merge_hash_entry *e; -- 2.30.2