From 1b59dbec2cc58b6b2404cf1732239e70a4915c69 Mon Sep 17 00:00:00 2001 From: Mistivia Date: Sat, 20 Dec 2025 04:03:21 +0800 Subject: fix fgetline mem leak --- .gitignore | 1 + str.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 00e7e1f..905bb61 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +tags /test_* *.o *.d diff --git a/str.c b/str.c index a8c2200..e8616aa 100644 --- a/str.c +++ b/str.c @@ -153,9 +153,17 @@ char *fgetline(FILE *fp) { init_str_builder(&sb); while (true) { int c = fgetc(fp); - if (c == EOF && sb.size == 0) return NULL; - if (c != EOF) str_builder_append_char(&sb, c); - if (c == EOF || c == '\n') return sb.buf; + if (c == EOF && sb.size == 0) { + free(sb.buf); + return NULL; + } + if (c != EOF) { + str_builder_append_char(&sb, c); + } + if (c == EOF || c == '\n') { + str_builder_append_char(&sb, '\0'); + return sb.buf; + } } return NULL; } -- cgit v1.0