aboutsummaryrefslogtreecommitdiff
path: root/str.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-12-20 04:03:21 +0800
committerMistivia <i@mistivia.com>2025-12-20 04:03:21 +0800
commit1b59dbec2cc58b6b2404cf1732239e70a4915c69 (patch)
treebc548addfc2cf0ec13ee91aa5fc40d1fe642ef5a /str.c
parentbaf05355db3bb624fcd114665980d8721b8f243b (diff)
fix fgetline mem leak
Diffstat (limited to 'str.c')
-rw-r--r--str.c14
1 files changed, 11 insertions, 3 deletions
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;
}