Hi Simon,

I noticed that our getdelim replacement can leak when the initial realloc
fails.  While that can happen only when *N is 0 and *LINEPTR is malloc'd,
I think it's worth fixing, if only to avoid further discussion on the topic.

Here's the fix.

Ok to apply?

        * lib/getdelim.c (getdelim): Don't leak memory upon failed realloc.

diff --git a/lib/getdelim.c b/lib/getdelim.c
index 0547c7f..7c6f326 100644
--- a/lib/getdelim.c
+++ b/lib/getdelim.c
@@ -69,13 +69,15 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE 
*fp)

   if (*lineptr == NULL || *n == 0)
     {
+      char *new_lineptr;
       *n = 120;
-      *lineptr = (char *) realloc (*lineptr, *n);
-      if (*lineptr == NULL)
+      new_lineptr = (char *) realloc (*lineptr, *n);
+      if (new_lineptr == NULL)
        {
          result = -1;
          goto unlock_return;
        }
+      *lineptr = new_lineptr;
     }

   for (;;)
--
1.5.4.3.341.g956c8c


Reply via email to