projects
/
infodrom
/
cgilib
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
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;
{
static char *line = NULL;
static size_t size = 0;
+ int len;
char buf[BUFSIZE];
char *cp;
char buf[BUFSIZE];
char *cp;
@@
-129,25
+130,35
@@
char *cgiGetLine (FILE *stream)
while (!feof (stream)) {
if ((cp = fgets (buf, sizeof (buf), stream)) == NULL)
while (!feof (stream)) {
if ((cp = fgets (buf, sizeof (buf), stream)) == NULL)
+ {
+ free(line);
+ line = NULL;
return NULL;
return NULL;
+ }
if (strlen(line)+strlen(buf)+1 > size) {
if ((cp = (char *)realloc (line, size + BUFSIZE)) == NULL)
return line;
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);
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;
}
}
cgiDebugOutput (4, "Read line '%s'", line);
return line;
}
}
+ free(line);
+ line = NULL;
+
return NULL;
}
return NULL;
}