From ca20ff4f4d0ac63856e538f9f4cef97197bf6465 Mon Sep 17 00:00:00 2001 From: c Date: Sun, 28 Jan 2024 21:43:37 -0500 Subject: Fixed buffer-overflow. --- src/source.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/source.c') diff --git a/src/source.c b/src/source.c index f7f7063..813e9f5 100644 --- a/src/source.c +++ b/src/source.c @@ -1,5 +1,5 @@ #include "include/source.h" -#include + char* source_get(char* arg) { return arg? source_get_from_fpath(arg): @@ -30,19 +30,20 @@ char* source_get_from_fpath(char* path) { } char* source_get_from_stdin() { + char* s; char* src; size_t l; - src = ecalloc(256, sizeof(char)); l = 0; - while (fgets(src + l, 20, stdin) != NULL) { - l += strlen(src + l); - } + src = ecalloc(16, sizeof(char)); - (src[l - 1] == '\n') && (src[l - 1] = '\0'); + while ((s = fgets(src + l, 20, stdin))) { + l = MIN(16, l + strlen(src + l)); + } -// src = fgets(src, 256, stdin); + /* This works, I guess. */ + s && src[l - 1] == '\n' && (src[l - 1] = '\0'); return src; } -- cgit v1.2.3