commit 89f98c099576591f8f65b9526d0f24de6dec95e8
parent b892f0a8774f573d7ec9b02617428871b8d3a2b3
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Thu, 26 Oct 2000 10:53:33 -0200
in function `read_file', realloc() doesn't free the buffer if it can't
allocate new memory
Diffstat:
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git 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
@@ -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;