From 89f98c099576591f8f65b9526d0f24de6dec95e8 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 26 Oct 2000 10:53:55 -0200 Subject: [PATCH] in function `read_file', realloc() doesn't free the buffer if it can't allocate new memory --- bugs | 6 ++++++ liolib.c | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bugs b/bugs index 7c970c14..92c172ed 100644 --- a/bugs +++ b/bugs @@ -229,3 +229,9 @@ Wed Sep 27 13:39:45 EST 2000 >> (e.g. «a = {print'foo'}») (by Edgar Toernig; since 4.0b, deriving from previous bug) +** liolib.c +Thu Oct 26 10:50:46 EDT 2000 +>> in function `read_file', realloc() doesn't free the buffer if it can't +>> allocate new memory +(by Mauro Vezzosi; since 4.0b) + diff --git a/liolib.c b/liolib.c index b1fddebe..d71965a6 100644 --- a/liolib.c +++ b/liolib.c @@ -1,5 +1,5 @@ /* -** $Id: liolib.c,v 1.87 2000/10/20 16:39:03 roberto Exp roberto $ +** $Id: liolib.c,v 1.88 2000/10/26 12:47:05 roberto Exp roberto $ ** Standard I/O (and system) library ** See Copyright Notice in lua.h */ @@ -345,9 +345,12 @@ static void read_file (lua_State *L, FILE *f) { size_t size = BUFSIZ; char *buffer = NULL; for (;;) { - buffer = (char *)realloc(buffer, size); - if (buffer == NULL) + char *newbuffer = (char *)realloc(buffer, size); + if (newbuffer == NULL) { + free(buffer); lua_error(L, "not enough memory to read a file"); + } + buffer = newbuffer; len += fread(buffer+len, sizeof(char), size-len, f); if (len < size) break; /* did not read all it could */ size *= 2;