diff options
author | Shav Kinderlehrer <[email protected]> | 2023-05-01 18:07:53 -0400 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2023-05-01 18:07:53 -0400 |
commit | d5c32592251039350fb290011df9cac3e5ea9e78 (patch) | |
tree | 85feb2968d39fe087e12255181f4ff0e85e11f74 /src/lib/process.c | |
parent | 7e24ad39b1e926339cbe3ec295791d0f608a91df (diff) | |
download | lat-d5c32592251039350fb290011df9cac3e5ea9e78.tar.gz lat-d5c32592251039350fb290011df9cac3e5ea9e78.zip |
Fix memory leak and NULL-check error
Diffstat (limited to 'src/lib/process.c')
-rw-r--r-- | src/lib/process.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lib/process.c b/src/lib/process.c index e927bd3..4eb5908 100644 --- a/src/lib/process.c +++ b/src/lib/process.c @@ -1,11 +1,15 @@ #include <stdlib.h> #include <string.h> +#include <stdio.h> + #include "types.h" #include "util.h" void appendline(struct filedata *f, char *data, size_t len) { f->lines = realloc(f->lines, sizeof(struct line) * (f->lc + 1)); + if (f->lines == NULL) + die("realloc"); size_t loc = f->lc; @@ -19,7 +23,7 @@ void loadlines(struct filedata *f) { f->lc = 0; size_t offset = 0; - size_t linelen = 4096; + size_t linelen = 1024; char *line = malloc(linelen); if (line == NULL) die("malloc"); @@ -27,10 +31,11 @@ void loadlines(struct filedata *f) { for (size_t i = 0; i < f->buflen; i++) { char c = f->buf[i]; if (c == '\n') { - if (offset < linelen) { // shrink + if (offset >= 1 && offset < linelen) { // shrink to fit char *new_line = realloc(line, offset); if (new_line == NULL) die("realloc"); + line = new_line; } @@ -58,7 +63,7 @@ void loadlines(struct filedata *f) { } // capture last line - if (offset < linelen) { // shrink + if (offset >= 1 && offset < linelen) { // shrink char *new_line = realloc(line, offset); if (new_line == NULL) die("realloc"); |