aboutsummaryrefslogtreecommitdiff
path: root/lstrlib.c
diff options
context:
space:
mode:
authorRoberto I <roberto@inf.puc-rio.br>2026-01-04 16:39:22 -0300
committerRoberto I <roberto@inf.puc-rio.br>2026-01-04 16:39:22 -0300
commit5cfc725a8b61a6f96c7324f60ac26739315095ba (patch)
treeaf8c6ea8a8d2a0802603377e80f58ac34b74dff2 /lstrlib.c
parent45c7ae5b1b05069543fe1710454c651350bc1c42 (diff)
downloadlua-5cfc725a8b61a6f96c7324f60ac26739315095ba.tar.gz
lua-5cfc725a8b61a6f96c7324f60ac26739315095ba.tar.bz2
lua-5cfc725a8b61a6f96c7324f60ac26739315095ba.zip
Special case for 'string.rep' over an empty string
Diffstat (limited to 'lstrlib.c')
-rw-r--r--lstrlib.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lstrlib.c b/lstrlib.c
index 06ea10d9..874cec80 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -141,8 +141,8 @@ static int str_rep (lua_State *L) {
141 const char *s = luaL_checklstring(L, 1, &len); 141 const char *s = luaL_checklstring(L, 1, &len);
142 lua_Integer n = luaL_checkinteger(L, 2); 142 lua_Integer n = luaL_checkinteger(L, 2);
143 const char *sep = luaL_optlstring(L, 3, "", &lsep); 143 const char *sep = luaL_optlstring(L, 3, "", &lsep);
144 if (n <= 0) 144 if (n <= 0 || (len | lsep) == 0)
145 lua_pushliteral(L, ""); 145 lua_pushliteral(L, ""); /* no repetitions or both strings empty */
146 else if (l_unlikely(len > MAX_SIZE - lsep || 146 else if (l_unlikely(len > MAX_SIZE - lsep ||
147 cast_st2S(len + lsep) > cast_st2S(MAX_SIZE) / n)) 147 cast_st2S(len + lsep) > cast_st2S(MAX_SIZE) / n))
148 return luaL_error(L, "resulting string too large"); 148 return luaL_error(L, "resulting string too large");