summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-11-23 17:17:54 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-11-23 17:17:54 +0100
commit2eaf7d3ef05047dd346dacafb268b9bc67f7ba56 (patch)
tree9bcfbe0c1bff34c21f2608e11e9650aa0ba788d1
parent687b880ddb0d67253d8903f92910a1ca3bea65ef (diff)
Fix: add missing null-terminator in getline implementation
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
-rw-r--r--lib/compat/getline.c10
-rw-r--r--tests/fstree_from_file.c1
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/compat/getline.c b/lib/compat/getline.c
index f330c6d..e63c50e 100644
--- a/lib/compat/getline.c
+++ b/lib/compat/getline.c
@@ -43,6 +43,16 @@ ssize_t getline(char **line, size_t *n, FILE *fp)
buffer[len++] = c;
} while (c != '\n');
+ if (len == cap) {
+ new = realloc(buffer, cap ? cap * 2 : 32);
+ if (new == NULL)
+ return -1;
+
+ buffer = new;
+ }
+
+ buffer[len] = '\0';
+
*line = buffer;
*n = len;
return len;
diff --git a/tests/fstree_from_file.c b/tests/fstree_from_file.c
index 4df0a4e..a0b6b2d 100644
--- a/tests/fstree_from_file.c
+++ b/tests/fstree_from_file.c
@@ -90,6 +90,7 @@ int main(void)
assert(n->uid == 2);
assert(n->gid == 3);
assert(strcmp(n->name, "slink") == 0);
+ fprintf(stderr, "'%s'\n", n->data.slink_target);
assert(strcmp(n->data.slink_target, "slinktarget") == 0);
n = n->next;