From 412c74bc2669dab5b0b1f8c78a0f66cc6f9b680b Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sat, 18 Oct 2014 11:26:31 +0000 Subject: [PATCH] load_file(): Treat fread() failures like other non-fatal file errors ... and check for underreads properly. Previously Privoxy was supposedly serving the file partially if it was edited in place, but actually would have served an error message and leaked memory. Now it just serves the error message (if it's run in a fantasy world were this actually happens). CID 66380, CID 66362, CID 66357. --- cgisimple.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cgisimple.c b/cgisimple.c index 514d2453..4a93dc78 100644 --- a/cgisimple.c +++ b/cgisimple.c @@ -1,4 +1,4 @@ -const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.128 2014/06/03 10:29:23 fabiankeil Exp $"; +const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.129 2014/10/18 11:25:13 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgisimple.c,v $ @@ -1990,14 +1990,16 @@ static jb_err load_file(const char *filename, char **buffer, size_t *length) { err = JB_ERR_MEMORY; } - else if (!fread(*buffer, *length, 1, fp)) + else if (1 != fread(*buffer, *length, 1, fp)) { /* - * May happen if the file size changes between fseek() and - * fread(). If it does, we just log it and serve what we got. + * May theoretically happen if the file size changes between + * fseek() and fread() because it's edited in-place. Privoxy + * and common text editors don't do that, thus we just fail. */ log_error(LOG_LEVEL_ERROR, "Couldn't completely read file %s.", filename); + freez(*buffer); err = JB_ERR_FILE; } -- 2.39.2