diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2011-03-24 13:10:38 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-03-24 13:11:11 -0700 |
commit | 84a1c646b281107213dcaa481b97e0fcba2ec589 (patch) | |
tree | 45f1592ee1eafabe4f5abcdc01671edd67da5cf6 /lib/xmalloc.c | |
parent | 444f6d99e3786db042fd90bade4f1864e89ceb05 (diff) | |
download | gnulib-84a1c646b281107213dcaa481b97e0fcba2ec589.tar.gz |
xmalloc: Do not leak if underlying realloc is C99 compatible.
* lib/xmalloc.c (xrealloc): If N is zero, call 'free' directly.
This avoids a leak on C99-based systems. See
<http://lists.gnu.org/archive/html/bug-gnulib/2011-03/msg00243.html>.
Diffstat (limited to 'lib/xmalloc.c')
-rw-r--r-- | lib/xmalloc.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/xmalloc.c b/lib/xmalloc.c index 74a8614b6c..4589e7d74e 100644 --- a/lib/xmalloc.c +++ b/lib/xmalloc.c @@ -52,8 +52,16 @@ xmalloc (size_t n) void * xrealloc (void *p, size_t n) { + if (!n) + { + /* The GNU and C99 realloc behaviors disagree here. Act like + GNU, even if the underlying realloc is C99. */ + free (p); + return NULL; + } + p = realloc (p, n); - if (!p && n != 0) + if (!p) xalloc_die (); return p; } |