From 48735da0d035d0a24f67b499ae888b824993c0fe Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 5 Jul 2013 15:02:28 -0300 Subject: [PATCH] When loading a file, Lua may call the reader function again after it returned end of input + luac listings choke on long strings --- bugs | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/bugs b/bugs index 7d39ad74..d2864ea8 100644 --- a/bugs +++ b/bugs @@ -1880,8 +1880,8 @@ patch = [[ +++ lundump.c 2008/04/04 19:51:41 2.7.1.4 @@ -1,5 +1,5 @@ /* --** $Id: bugs,v 1.123 2013/05/13 16:17:47 roberto Exp roberto $ -+** $Id: bugs,v 1.123 2013/05/13 16:17:47 roberto Exp roberto $ +-** $Id: bugs,v 1.124 2013/05/16 16:03:50 roberto Exp roberto $ ++** $Id: bugs,v 1.124 2013/05/16 16:03:50 roberto Exp roberto $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ @@ -2409,6 +2409,57 @@ patch = [[ } +Bug{ +what = [[When loading a file, +Lua may call the reader function again after it returned end of input +]], +report = [[Chris Howie, 2013/06/05]], +since = [[5.1]], +fix = [[5.2]], +example = [[ +load(function () print("called"); return nil end) +--> called +--> called (should be called only once!) +]], +patch = [[ +--- lzio.h 2007/12/27 13:02:25 1.21.1.1 ++++ lzio.h 2013/07/04 13:55:59 +@@ -59,6 +59,7 @@ + lua_Reader reader; + void* data; /* additional data */ + lua_State *L; /* Lua state (for reader) */ ++ int eoz; /* true if reader has no more data */ + }; + + +--- lzio.c 2007/12/27 13:02:25 1.31.1.1 ++++ lzio.c 2013/07/04 13:53:06 +@@ -22,10 +22,14 @@ + size_t size; + lua_State *L = z->L; + const char *buff; ++ if (z->eoz) return EOZ; + lua_unlock(L); + buff = z->reader(L, z->data, &size); + lua_lock(L); +- if (buff == NULL || size == 0) return EOZ; ++ if (buff == NULL || size == 0) { ++ z->eoz = 1; /* avoid calling reader function next time */ ++ return EOZ; ++ } + z->n = size - 1; + z->p = buff; + return char2int(*(z->p++)); +@@ -51,6 +55,7 @@ + z->data = data; + z->n = 0; + z->p = NULL; ++ z->eoz = 0; + } +]] +} + + ----------------------------------------------------------------- -- Lua 5.2.0 @@ -3025,6 +3076,31 @@ patch = [[ ]] } +Bug{ +what = [[luac listings choke on long strings]], +report = [[Ashwin Hirschi, 2013/07/03]], +since = [[5.1.2]], +fix = nil, +example = [[ +-- When you call 'luac -l' over this chunk, it chokes the output +s="Lorem ipsum dolor sit amet, consectetur, " +]], +patch = [[ +--- luac.c 2011-11-29 15:46:33 -0200 1.69 ++++ luac.c 2013-07-03 21:26:01 -0300 +@@ -251,7 +251,7 @@ + static void PrintConstant(const Proto* f, int i) + { + const TValue* o=&f->k[i]; +- switch (ttype(o)) ++ switch (ttypenv(o)) + { + case LUA_TNIL: + printf("nil"); +]] +} + + --[=[ Bug{ what = [[ ]],