gpointer ud;
gpointer re_class;
guint64 cache_id;
+ guint max_hits;
gint flags;
gint pcre_flags;
gint ncaptures;
res->pattern = real_pattern;
res->cache_id = RSPAMD_INVALID_ID;
res->pcre_flags = regexp_flags;
+ res->max_hits = 0;
if (rspamd_flags & RSPAMD_REGEXP_FLAG_RAW) {
res->raw_re = r;
return re->ncaptures;
}
+guint
+rspamd_regexp_get_maxhits (rspamd_regexp_t *re)
+{
+ g_assert (re != NULL);
+
+ return re->max_hits;
+}
+
+guint
+rspamd_regexp_set_maxhits (rspamd_regexp_t *re, guint new_maxhits)
+{
+ guint old_hits;
+
+ g_assert (re != NULL);
+ old_hits = re->max_hits;
+ re->max_hits = new_maxhits;
+
+ return old_hits;
+}
+
guint64
rspamd_regexp_get_cache_id (rspamd_regexp_t *re)
{
*/
guint rspamd_regexp_get_flags (rspamd_regexp_t *re);
+/**
+ * Set regexp maximum hits
+ */
+guint rspamd_regexp_get_maxhits (rspamd_regexp_t *re);
+
+/**
+ * Get regexp maximum hits
+ */
+guint rspamd_regexp_set_maxhits (rspamd_regexp_t *re, guint new_maxhits);
+
/**
* Returns number of backreferences in a regexp
*/
LUA_FUNCTION_DEF (regexp, get_cached);
LUA_FUNCTION_DEF (regexp, get_pattern);
LUA_FUNCTION_DEF (regexp, set_limit);
+LUA_FUNCTION_DEF (regexp, set_max_hits);
LUA_FUNCTION_DEF (regexp, search);
LUA_FUNCTION_DEF (regexp, match);
LUA_FUNCTION_DEF (regexp, matchn);
static const struct luaL_reg regexplib_m[] = {
LUA_INTERFACE_DEF (regexp, get_pattern),
LUA_INTERFACE_DEF (regexp, set_limit),
+ LUA_INTERFACE_DEF (regexp, set_max_hits),
LUA_INTERFACE_DEF (regexp, match),
LUA_INTERFACE_DEF (regexp, matchn),
LUA_INTERFACE_DEF (regexp, search),
return 0;
}
+/***
+ * @method re:set_max_hits(lim)
+ * Set maximum number of hits returned by a regexp
+ * @param {number} lim limit in bytes
+ */
+static int
+lua_regexp_set_max_hits (lua_State *L)
+{
+ struct rspamd_lua_regexp *re = lua_check_regexp (L);
+ guint lim;
+
+ lim = luaL_checknumber (L, 2);
+
+ if (re && re->re && !IS_DESTROYED (re)) {
+ lua_pushnumber (L, rspamd_regexp_set_maxhits (re->re, lim));
+ }
+ else {
+ lua_pushnil (L);
+ }
+
+ return 1;
+}
+
/***
* @method re:search(line[, raw[, capture]])
* Search line in regular expression object. If line matches then this