diff options
author | Tom de Vries <tdevries@suse.de> | 2018-11-27 08:25:52 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2018-11-27 08:25:52 +0000 |
commit | 0c155f24a945a55c37a963f64e89870f60543e64 (patch) | |
tree | 5936c40993d7b836b78772d3d1b6d97cd1055148 /libbacktrace/alloc.c | |
parent | 1ea7ea181d8d3139df4ea66dc2ee98b27fa66b6f (diff) | |
download | gcc-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.c | 13 |
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; } |