diff --git a/VM/src/lstrlib.cpp b/VM/src/lstrlib.cpp index 69fd0d67..49158f27 100644 --- a/VM/src/lstrlib.cpp +++ b/VM/src/lstrlib.cpp @@ -1034,6 +1034,11 @@ static int str_format(lua_State* L) } case '*': { + if (formatItemSize != 1) + { + luaL_error(L, "'%%*' does not take a form"); + } + size_t length; const char* string = luaL_tolstring(L, arg, &length); diff --git a/tests/conformance/strings.lua b/tests/conformance/strings.lua index f07fb4bd..c87cf15c 100644 --- a/tests/conformance/strings.lua +++ b/tests/conformance/strings.lua @@ -146,6 +146,10 @@ end) == false) assert(string.format("%*", "a\0b\0c") == "a\0b\0c") assert(string.format("%*", string.rep("doge", 3000)) == string.rep("doge", 3000)) +assert(pcall(function() + string.format("%#*", "bad form") +end) == false) + assert(loadstring("return 1\n--comentário sem EOL no final")() == 1)