From 0bd5e622206e006178730b07ade91dc4998817b2 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 1 May 2025 21:03:27 +0200 Subject: [PATCH] Fixing potential crash in readline function caused by neglecting result of realloc --- src/fileio/scan.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/fileio/scan.c b/src/fileio/scan.c index c57c7ec1..7564f420 100644 --- a/src/fileio/scan.c +++ b/src/fileio/scan.c @@ -60,12 +60,15 @@ static ssize_t readline(char** lineptr, size_t* n, FILE* stream) { } p = bufptr; while (c != EOF) { - if ((ssize_t)(p - bufptr) > (ssize_t)(size - 1)) { - size = size + 128; - bufptr = realloc(bufptr, size); - if (bufptr == NULL) { + if ((ssize_t)(p - bufptr)+1 > (ssize_t)(size)) { + size_t offset = p - bufptr; // save offset + size = size + 128; + char * new_buf = realloc(bufptr, size); + if (new_buf == NULL) { return -1; } + bufptr = new_buf; + p = bufptr + offset; // recalculate p using the saved offset } *p++ = c; if (c == '\n') {