aboutsummaryrefslogtreecommitdiff
path: root/libbacktrace/alloc.c
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2018-11-27 08:25:52 +0000
committerTom de Vries <vries@gcc.gnu.org>2018-11-27 08:25:52 +0000
commit0c155f24a945a55c37a963f64e89870f60543e64 (patch)
tree5936c40993d7b836b78772d3d1b6d97cd1055148 /libbacktrace/alloc.c
parent1ea7ea181d8d3139df4ea66dc2ee98b27fa66b6f (diff)
downloadgcc-0c155f24a945a55c37a963f64e89870f60543e64.zip
gcc-0c155f24a945a55c37a963f64e89870f60543e64.tar.gz
gcc-0c155f24a945a55c37a963f64e89870f60543e64.tar.bz2
[libbacktrace] Avoid realloc with size == 0 in backtrace_vector_release
As of C17, realloc with size 0 is marked as an obsolescent feature. Fix this in backtrace_vector_release by using free instead. Bootstrapped and reg-tested on x86_64. 2018-11-27 Tom de Vries <tdevries@suse.de> * alloc.c (backtrace_vector_release): Handle vec->size == 0 using free instead of realloc. * Makefile.am (check_PROGRAMS): Add unittest. * Makefile.in: Regenerate. * unittest.c: New file. From-SVN: r266504
Diffstat (limited to 'libbacktrace/alloc.c')
-rw-r--r--libbacktrace/alloc.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/libbacktrace/alloc.c b/libbacktrace/alloc.c
index 7070afb..522b59d 100644
--- a/libbacktrace/alloc.c
+++ b/libbacktrace/alloc.c
@@ -145,12 +145,23 @@ backtrace_vector_release (struct backtrace_state *state ATTRIBUTE_UNUSED,
backtrace_error_callback error_callback,
void *data)
{
+ vec->alc = 0;
+
+ if (vec->size == 0)
+ {
+ /* As of C17, realloc with size 0 is marked as an obsolescent feature, use
+ free instead. */
+ free (vec->base);
+ vec->base = NULL;
+ return 1;
+ }
+
vec->base = realloc (vec->base, vec->size);
if (vec->base == NULL)
{
error_callback (data, "realloc", errno);
return 0;
}
- vec->alc = 0;
+
return 1;
}