Fix memory leaks found by valgrind
[infodrom/cgilib] / aux.c
diff --git a/aux.c b/aux.c
index a808b9d..dfb0f96 100644 (file)
--- a/aux.c
+++ b/aux.c
@@ -117,6 +117,7 @@ char *cgiGetLine (FILE *stream)
 {
     static char *line = NULL;
     static size_t size = 0;
+    int len;
     char buf[BUFSIZE];
     char *cp;
 
@@ -129,25 +130,35 @@ char *cgiGetLine (FILE *stream)
 
     while (!feof (stream)) {
       if ((cp = fgets (buf, sizeof (buf), stream)) == NULL)
+      {
+       free(line);
+       line = NULL;
        return NULL;
+      }
 
       if (strlen(line)+strlen(buf)+1 > size) {
        if ((cp = (char *)realloc (line, size + BUFSIZE)) == NULL)
          return line;
+       cp[size] = '\0';
        size += BUFSIZE;
        line = cp;
       }
 
       strcat (line, buf);
-      if (line[strlen(line)-1] == '\n') {
-       line[strlen(line)-1] = '\0';
-       if (line[strlen(line)-1] == '\r')
-         line[strlen(line)-1] = '\0';
+      len = strlen(line);
+      if (len && line[len-1] == '\n') {
+       line[len-1] = '\0';
+       len --;
+       if (len && line[len-1] == '\r')
+         line[len-1] = '\0';
        cgiDebugOutput (4, "Read line '%s'", line);
        return line;
       }
     }
 
+    free(line);
+    line = NULL;
+
     return NULL;
 }