commit 3e88b72b8e71c0946d089a04876e7bdc61d187a9
parent 8b752ddf14c1987411906d07a8c68f72f168b9b7
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Mon, 19 Aug 2024 18:38:58 -0300
A return can have at most 254 values
Diffstat:
2 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/lcode.c b/lcode.c
@@ -208,6 +208,8 @@ void luaK_ret (FuncState *fs, int first, int nret) {
case 1: op = OP_RETURN1; break;
default: op = OP_RETURN; break;
}
+ if (nret + 1 > MAXARG_B)
+ luaX_syntaxerror(fs->ls, "too many returns");
luaK_codeABC(fs, op, first, nret + 1, 0);
}
diff --git a/testes/calls.lua b/testes/calls.lua
@@ -518,5 +518,16 @@ do -- check reuse of strings in dumps
end
end
+
+do -- test limit of multiple returns (254 values)
+ local code = "return 10" .. string.rep(",10", 253)
+ local res = {assert(load(code))()}
+ assert(#res == 254 and res[254] == 10)
+
+ code = code .. ",10"
+ local status, msg = load(code)
+ assert(not status and string.find(msg, "too many returns"))
+end
+
print('OK')
return deep