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 | 1c90bf55b1874a2dec07eb6f2cacd623700859bd (patch) | |
tree | b9dc3a65d016d62f61198056d10c8f1ec26edac1 /src | |
parent | 36af47eab84fb9ec1f60331fbd0d8c7a85698954 (diff) | |
download | lat-1c90bf55b1874a2dec07eb6f2cacd623700859bd.tar.gz lat-1c90bf55b1874a2dec07eb6f2cacd623700859bd.zip |
Fix memory leak and NULL-check error
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/file.c | 1 | ||||
-rw-r--r-- | src/lib/process.c | 11 | ||||
-rw-r--r-- | src/main.c | 8 |
3 files changed, 12 insertions, 8 deletions
diff --git a/src/lib/file.c b/src/lib/file.c index 1f2372a..6dba950 100644 --- a/src/lib/file.c +++ b/src/lib/file.c @@ -42,7 +42,6 @@ struct filedata readfile(FILE *fp, bool isstdin) { while (fread(&c, 1, 1, fp) > 0) { if (f.buflen == bufsize - 1) { bufsize *= 2; - char *new_buf = realloc(f.buf, bufsize); if (new_buf == NULL) die("realloc"); 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"); @@ -1,12 +1,11 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - #include "arg.h" #include "file.h" #include "process.h" #include "types.h" #include "util.h" +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> #define INVERT_T "\x1b[7m" #define UINVERT_T "\x1b[27m" @@ -77,6 +76,7 @@ void run(FILE *fp, char *filename, bool tty) { fwrite("\n", 1, 1, err); } free(f.buf); + free(f.lines); fflush(st); // prevent timing inconsistencies between st and err fflush(err); |