From 3e88b72b8e71c0946d089a04876e7bdc61d187a9 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 19 Aug 2024 18:39:25 -0300 Subject: A return can have at most 254 values --- lcode.c | 2 ++ testes/calls.lua | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/lcode.c b/lcode.c index e7750fff..8786a721 100644 --- 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 index 9a5eed0b..409a275d 100644 --- 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 -- cgit v1.2.3-55-g6feb