diff options
| author | Roberto I <roberto@inf.puc-rio.br> | 2026-01-04 16:39:22 -0300 |
|---|---|---|
| committer | Roberto I <roberto@inf.puc-rio.br> | 2026-01-04 16:39:22 -0300 |
| commit | 5cfc725a8b61a6f96c7324f60ac26739315095ba (patch) | |
| tree | af8c6ea8a8d2a0802603377e80f58ac34b74dff2 /lstrlib.c | |
| parent | 45c7ae5b1b05069543fe1710454c651350bc1c42 (diff) | |
| download | lua-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.c | 4 |
1 files changed, 2 insertions, 2 deletions
| @@ -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"); |
