From: Vsevolod Stakhov Date: Thu, 19 Nov 2020 11:34:03 +0000 (+0000) Subject: [Minor] Fix some more lua compat issues with text:find X-Git-Tag: 2.7~132 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ff7c63b24d8e20fa4c75e408a5d29c44b154819f;p=thirdparty%2Frspamd.git [Minor] Fix some more lua compat issues with text:find --- diff --git a/src/libutil/str_util.c b/src/libutil/str_util.c index 80f94707a3..1e7d0b06b6 100644 --- a/src/libutil/str_util.c +++ b/src/libutil/str_util.c @@ -1891,6 +1891,9 @@ rspamd_substring_search (const gchar *in, gsize inlen, return (-1); } + else if (G_UNLIKELY (srchlen == 0)) { + return 0; + } return rspamd_substring_search_common (in, inlen, srch, srchlen, rspamd_substring_cmp_func); diff --git a/src/lua/lua_text.c b/src/lua/lua_text.c index dbbba98382..23e908c670 100644 --- a/src/lua/lua_text.c +++ b/src/lua/lua_text.c @@ -1358,12 +1358,14 @@ lua_text_find (lua_State *L) init = relative_pos_start (lua_tointeger (L, 3), t->len); } + init --; + if (init > t->len) { return luaL_error (L, "invalid arguments to find: init too large"); } - goffset pos = rspamd_substring_search (t->start + init - 1, - t->len - (init - 1), + goffset pos = rspamd_substring_search (t->start + init, + t->len - init, pat, patlen); if (pos == -1) { diff --git a/test/lua/unit/rspamd_text.lua b/test/lua/unit/rspamd_text.lua index 3e6d0fff7c..d643d9e634 100644 --- a/test/lua/unit/rspamd_text.lua +++ b/test/lua/unit/rspamd_text.lua @@ -39,6 +39,9 @@ context("Rspamd_text:find() test", function() {{'foobarfoo', 'rfoo'}, {6, 9}}, {{'foo', 'bar'}, nil}, {{'x', 'xxxx'}, nil}, + {{'', ''}, {1, 0}}, + {{'', '_'}, nil}, + {{'x', ''}, {1, 0}}, } for _, case in ipairs(cases) do