aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2013-07-05 15:02:28 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2013-07-05 15:02:28 -0300
commit48735da0d035d0a24f67b499ae888b824993c0fe (patch)
tree4a388ae685ec29b2302df9afc770a7abce66083a
parent2b4bd21585c15a25fdf7dee6ae7a4fc98916112a (diff)
downloadlua-48735da0d035d0a24f67b499ae888b824993c0fe.tar.gz
lua-48735da0d035d0a24f67b499ae888b824993c0fe.tar.bz2
lua-48735da0d035d0a24f67b499ae888b824993c0fe.zip
When loading a file, Lua may call the reader function again after
it returned end of input + luac listings choke on long strings
-rw-r--r--bugs80
1 files changed, 78 insertions, 2 deletions
diff --git a/bugs b/bugs
index 7d39ad74..d2864ea8 100644
--- a/bugs
+++ b/bugs
@@ -1880,8 +1880,8 @@ patch = [[
1880+++ lundump.c 2008/04/04 19:51:41 2.7.1.4 1880+++ lundump.c 2008/04/04 19:51:41 2.7.1.4
1881@@ -1,5 +1,5 @@ 1881@@ -1,5 +1,5 @@
1882 /* 1882 /*
1883-** $Id: bugs,v 1.123 2013/05/13 16:17:47 roberto Exp roberto $ 1883-** $Id: bugs,v 1.124 2013/05/16 16:03:50 roberto Exp roberto $
1884+** $Id: bugs,v 1.123 2013/05/13 16:17:47 roberto Exp roberto $ 1884+** $Id: bugs,v 1.124 2013/05/16 16:03:50 roberto Exp roberto $
1885 ** load precompiled Lua chunks 1885 ** load precompiled Lua chunks
1886 ** See Copyright Notice in lua.h 1886 ** See Copyright Notice in lua.h
1887 */ 1887 */
@@ -2409,6 +2409,57 @@ patch = [[
2409} 2409}
2410 2410
2411 2411
2412Bug{
2413what = [[When loading a file,
2414Lua may call the reader function again after it returned end of input
2415]],
2416report = [[Chris Howie, 2013/06/05]],
2417since = [[5.1]],
2418fix = [[5.2]],
2419example = [[
2420load(function () print("called"); return nil end)
2421--> called
2422--> called (should be called only once!)
2423]],
2424patch = [[
2425--- lzio.h 2007/12/27 13:02:25 1.21.1.1
2426+++ lzio.h 2013/07/04 13:55:59
2427@@ -59,6 +59,7 @@
2428 lua_Reader reader;
2429 void* data; /* additional data */
2430 lua_State *L; /* Lua state (for reader) */
2431+ int eoz; /* true if reader has no more data */
2432 };
2433
2434
2435--- lzio.c 2007/12/27 13:02:25 1.31.1.1
2436+++ lzio.c 2013/07/04 13:53:06
2437@@ -22,10 +22,14 @@
2438 size_t size;
2439 lua_State *L = z->L;
2440 const char *buff;
2441+ if (z->eoz) return EOZ;
2442 lua_unlock(L);
2443 buff = z->reader(L, z->data, &size);
2444 lua_lock(L);
2445- if (buff == NULL || size == 0) return EOZ;
2446+ if (buff == NULL || size == 0) {
2447+ z->eoz = 1; /* avoid calling reader function next time */
2448+ return EOZ;
2449+ }
2450 z->n = size - 1;
2451 z->p = buff;
2452 return char2int(*(z->p++));
2453@@ -51,6 +55,7 @@
2454 z->data = data;
2455 z->n = 0;
2456 z->p = NULL;
2457+ z->eoz = 0;
2458 }
2459]]
2460}
2461
2462
2412----------------------------------------------------------------- 2463-----------------------------------------------------------------
2413-- Lua 5.2.0 2464-- Lua 5.2.0
2414 2465
@@ -3025,6 +3076,31 @@ patch = [[
3025]] 3076]]
3026} 3077}
3027 3078
3079Bug{
3080what = [[luac listings choke on long strings]],
3081report = [[Ashwin Hirschi, 2013/07/03]],
3082since = [[5.1.2]],
3083fix = nil,
3084example = [[
3085-- When you call 'luac -l' over this chunk, it chokes the output
3086s="Lorem ipsum dolor sit amet, consectetur, "
3087]],
3088patch = [[
3089--- luac.c 2011-11-29 15:46:33 -0200 1.69
3090+++ luac.c 2013-07-03 21:26:01 -0300
3091@@ -251,7 +251,7 @@
3092 static void PrintConstant(const Proto* f, int i)
3093 {
3094 const TValue* o=&f->k[i];
3095- switch (ttype(o))
3096+ switch (ttypenv(o))
3097 {
3098 case LUA_TNIL:
3099 printf("nil");
3100]]
3101}
3102
3103
3028--[=[ 3104--[=[
3029Bug{ 3105Bug{
3030what = [[ ]], 3106what = [[ ]],