From ccdcf210bb919d55e39720c6663c29be1dc3b9d7 Mon Sep 17 00:00:00 2001 From: Solar Designer Date: Tue, 30 Apr 2024 14:33:23 +0200 Subject: [PATCH] fgetll(): Work around spurious GCC warning on realloc() Claudio reports this: gcc (GCC) 14.0.1 20240411 (Red Hat 14.0.1-0) Fedora release 40 (Forty) misc.c: In function 'fgetll': misc.c:214:34: error: pointer 'cp' may be used after 'realloc' [-Werror=use-after-free] 214 | new_cp = realloc(cp, len + increase); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ misc.c:208:26: note: call to 'realloc' here 208 | new_cp = realloc(cp, len + increase); Completes b59ccbd615df3358dc91218ca57d8b952f6b1f73 Fixes #5470 --- src/misc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/misc.c b/src/misc.c index c6989cd9bd4..aceb0a36fe1 100644 --- a/src/misc.c +++ b/src/misc.c @@ -206,6 +206,9 @@ char *fgetll(char *s, size_t size, FILE *stream) void *new_cp; new_cp = realloc(cp, len + increase); + /* Reference the relocated pointer to avoid GCC -Wuse-after-free */ + if (new_cp) + cp = new_cp; while (!new_cp) { increase >>= 2; @@ -217,6 +220,7 @@ char *fgetll(char *s, size_t size, FILE *stream) cp = new_cp; } + /* This became redundant after GCC warning workarounds above */ cp = new_cp; /* We get an EOF if there is no trailing \n on the last line */