Make sure that gcry_realloc (NULL, n) works on all platforms.
authorWerner Koch <wk@gnupg.org>
Fri, 1 Apr 2011 08:16:31 +0000 (10:16 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 1 Apr 2011 08:16:31 +0000 (10:16 +0200)
realloc (NULL, n) shall behave exactly like malloc (n)
and realloc (p, 0) like free.

Not all platforms implement this correctly thus we now handle this
directly in gcry_realloc.

src/ChangeLog
src/global.c

index 9ef6c5d..9476e82 100644 (file)
@@ -1,3 +1,7 @@
+2011-04-01  Werner Koch  <wk@g10code.com>
+
+       * global.c (gcry_realloc): Divert to gcry_malloc or gcry_free.
+
 2011-03-09  Werner Koch  <wk@g10code.com>
 
        * gcrypt.h.in (gcry_kdf_algos): New.
index cbb7eb8..d65b068 100644 (file)
@@ -833,6 +833,16 @@ gcry_realloc (void *a, size_t n)
 {
   void *p;
 
+  /* To avoid problems with non-standard realloc implementations and
+     our own secmem_realloc, we divert to malloc and free here.  */
+  if (!a)
+    return gcry_malloc (n);
+  if (!n)
+    {
+      gcry_free (a);
+      return NULL;
+    }
+
   if (realloc_func)
     p = realloc_func (a, n);
   else