From: Vsevolod Stakhov Date: Fri, 27 Sep 2019 10:14:46 +0000 (+0100) Subject: [Minor] Fix re matching when len == 0 X-Git-Tag: 2.0~115 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=24a0be9cf3f7aa22160a43e06fa94924b7e7065a;p=rspamd.git [Minor] Fix re matching when len == 0 --- diff --git a/src/libutil/map_helpers.c b/src/libutil/map_helpers.c index 964e4d98c..aaf771b5c 100644 --- a/src/libutil/map_helpers.c +++ b/src/libutil/map_helpers.c @@ -1252,12 +1252,12 @@ rspamd_match_regexp_map_all (struct rspamd_regexp_map_helper *map, gboolean validated = FALSE; struct rspamd_map_helper_value *val; - g_assert (in != NULL); - if (map == NULL || map->regexps == NULL || len == 0) { return NULL; } + g_assert (in != NULL); + if (map->map_flags & RSPAMD_REGEXP_MAP_FLAG_UTF) { if (g_utf8_validate (in, len, NULL)) { validated = TRUE; diff --git a/src/libutil/multipattern.c b/src/libutil/multipattern.c index 363cd800f..6eec009b3 100644 --- a/src/libutil/multipattern.c +++ b/src/libutil/multipattern.c @@ -611,7 +611,7 @@ rspamd_multipattern_lookup (struct rspamd_multipattern *mp, g_assert (mp != NULL); - if (mp->cnt == 0 || !mp->compiled) { + if (mp->cnt == 0 || !mp->compiled || len == 0) { return 0; } diff --git a/src/lua/lua_regexp.c b/src/lua/lua_regexp.c index 95f40f8f0..a677f7195 100644 --- a/src/lua/lua_regexp.c +++ b/src/lua/lua_regexp.c @@ -543,7 +543,7 @@ lua_regexp_search (lua_State *L) raw = lua_toboolean (L, 3); } - if (data) { + if (data && len > 0) { if (lua_gettop (L) >= 4) { capture = TRUE; captures = g_array_new (FALSE, TRUE, @@ -633,7 +633,7 @@ lua_regexp_match (lua_State *L) raw = lua_toboolean (L, 3); } - if (data) { + if (data && len > 0) { if (re->match_limit > 0) { len = MIN (len, re->match_limit); } @@ -694,7 +694,7 @@ lua_regexp_matchn (lua_State *L) raw = lua_toboolean (L, 4); } - if (data) { + if (data && len > 0) { matches = 0; if (re->match_limit > 0) { @@ -770,10 +770,11 @@ lua_regexp_split (lua_State *L) len = MIN (len, re->match_limit); } - if (data) { + if (data && len > 0) { lua_newtable (L); i = 0; old_start = data; + while (rspamd_regexp_search (re->re, data, len, &start, &end, FALSE, NULL)) { if (start - old_start > 0) {