aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lundump.c3
-rw-r--r--testes/calls.lua16
2 files changed, 18 insertions, 1 deletions
diff --git a/lundump.c b/lundump.c
index cb124d6f..5aa55c44 100644
--- a/lundump.c
+++ b/lundump.c
@@ -120,7 +120,10 @@ static TString *loadStringN (LoadState *S, Proto *p) {
120 } 120 }
121 else { /* long string */ 121 else { /* long string */
122 ts = luaS_createlngstrobj(L, size); /* create string */ 122 ts = luaS_createlngstrobj(L, size); /* create string */
123 setsvalue2s(L, L->top, ts); /* anchor it ('loadVector' can GC) */
124 luaD_inctop(L);
123 loadVector(S, getstr(ts), size); /* load directly in final place */ 125 loadVector(S, getstr(ts), size); /* load directly in final place */
126 L->top--; /* pop string */
124 } 127 }
125 luaC_objbarrier(L, p, ts); 128 luaC_objbarrier(L, p, ts);
126 return ts; 129 return ts;
diff --git a/testes/calls.lua b/testes/calls.lua
index decf4176..ff72d8f6 100644
--- a/testes/calls.lua
+++ b/testes/calls.lua
@@ -317,6 +317,16 @@ f = load(string.dump(function () return 1 end), nil, "b", {})
317assert(type(f) == "function" and f() == 1) 317assert(type(f) == "function" and f() == 1)
318 318
319 319
320do -- another bug (in 5.4.0)
321 -- loading a binary long string interrupted by GC cycles
322 local f = string.dump(function ()
323 return '01234567890123456789012345678901234567890123456789'
324 end)
325 f = load(read1(f))
326 assert(f() == '01234567890123456789012345678901234567890123456789')
327end
328
329
320x = string.dump(load("x = 1; return x")) 330x = string.dump(load("x = 1; return x"))
321a = assert(load(read1(x), nil, "b")) 331a = assert(load(read1(x), nil, "b"))
322assert(a() == 1 and _G.x == 1) 332assert(a() == 1 and _G.x == 1)
@@ -358,8 +368,12 @@ x = [[
358 end 368 end
359 end 369 end
360]] 370]]
371a = assert(load(read1(x), "read", "t"))
372assert(a()(2)(3)(10) == 15)
361 373
362a = assert(load(read1(x))) 374-- repeat the test loading a binary chunk
375x = string.dump(a)
376a = assert(load(read1(x), "read", "b"))
363assert(a()(2)(3)(10) == 15) 377assert(a()(2)(3)(10) == 15)
364 378
365 379