浏览代码

[CritFix] Protect regexp matcher from regexps with empty patterns

Issue: #4885
Closes: #4885
pull/4887/head
Vsevolod Stakhov 1 个月前
父节点
当前提交
2038f3c92a
没有帐户链接到提交者的电子邮件
共有 3 个文件被更改,包括 15 次插入1 次删除
  1. 5
    0
      src/libserver/re_cache.c
  2. 4
    0
      src/libutil/multipattern.c
  3. 6
    1
      src/lua/lua_regexp.c

+ 5
- 0
src/libserver/re_cache.c 查看文件

@@ -632,6 +632,11 @@ rspamd_re_cache_process_pcre(struct rspamd_re_runtime *rt,
if (max_hits > 0 && r >= max_hits) {
break;
}

if (start >= end) {
/* We found all matches, so no more hits are possible (protect from empty patterns) */
break;
}
}

rt->results[id] += r;

+ 4
- 0
src/libutil/multipattern.c 查看文件

@@ -717,6 +717,10 @@ int rspamd_multipattern_lookup(struct rspamd_multipattern *mp,
&end,
TRUE,
NULL)) {
if (start >= end) {
/* We found all matches, so no more hits are possible (protect from empty patterns) */
break;
}
if (rspamd_multipattern_acism_cb(i, end - in, &cbd)) {
goto out;
}

+ 6
- 1
src/lua/lua_regexp.c 查看文件

@@ -543,6 +543,11 @@ lua_regexp_search(lua_State *L)
}

matched = TRUE;

if (start >= end) {
/* We found all matches, so no more hits are possible (protect from empty patterns) */
break;
}
}

if (!matched) {
@@ -749,7 +754,7 @@ lua_regexp_split(lua_State *L)
lua_rawseti(L, -2, ++i);
matched = TRUE;
}
else if (start == end) {
else if (start >= end) {
break;
}
old_start = end;

正在加载...
取消
保存