commit 3540ae2: [Fix] Fix get_urls table invocation
Vsevolod Stakhov
vsevolod at highsecure.ru
Mon May 18 16:00:09 UTC 2020
Author: Vsevolod Stakhov
Date: 2020-05-18 16:33:14 +0100
URL: https://github.com/rspamd/rspamd/commit/3540ae213ae6be23c5b9a4d8ff758833604716c9
[Fix] Fix get_urls table invocation
---
src/lua/lua_url.c | 59 +++++++++++++++++++++++++++++++++----------------------
1 file changed, 36 insertions(+), 23 deletions(-)
diff --git a/src/lua/lua_url.c b/src/lua/lua_url.c
index f07f94bbd..b49146292 100644
--- a/src/lua/lua_url.c
+++ b/src/lua/lua_url.c
@@ -964,6 +964,7 @@ lua_url_cbdata_fill (lua_State *L,
gint pos_arg_type = lua_type (L, pos);
guint flags_mask = default_flags;
+ gboolean seen_flags = FALSE, seen_protocols = FALSE;
if (pos_arg_type == LUA_TBOOLEAN) {
protocols_mask = default_protocols;
@@ -977,7 +978,9 @@ lua_url_cbdata_fill (lua_State *L,
lua_getfield (L, pos, "flags");
if (lua_istable (L, -1)) {
- for (lua_pushnil (L); lua_next (L, pos); lua_pop (L, 1)) {
+ gint top = lua_gettop (L);
+
+ for (lua_pushnil (L); lua_next (L, top); lua_pop (L, 1)) {
int nmask = 0;
const gchar *fname = lua_tostring (L, -1);
@@ -990,6 +993,7 @@ lua_url_cbdata_fill (lua_State *L,
return FALSE;
}
}
+ seen_flags = TRUE;
}
else {
flags_mask |= default_flags;
@@ -998,7 +1002,9 @@ lua_url_cbdata_fill (lua_State *L,
lua_getfield (L, pos, "protocols");
if (lua_istable (L, -1)) {
- for (lua_pushnil (L); lua_next (L, pos); lua_pop (L, 1)) {
+ gint top = lua_gettop (L);
+
+ for (lua_pushnil (L); lua_next (L, top); lua_pop (L, 1)) {
int nmask;
const gchar *pname = lua_tostring (L, -1);
@@ -1012,47 +1018,54 @@ lua_url_cbdata_fill (lua_State *L,
return FALSE;
}
}
+ seen_protocols = TRUE;
}
else {
protocols_mask = default_protocols;
}
lua_pop (L, 1);
- lua_getfield (L, pos, "emails");
- if (lua_isboolean (L, -1)) {
- if (lua_toboolean (L, -1)) {
- protocols_mask |= PROTOCOL_MAILTO;
+ if (!seen_protocols) {
+ lua_getfield (L, pos, "emails");
+ if (lua_isboolean (L, -1)) {
+ if (lua_toboolean (L, -1)) {
+ protocols_mask |= PROTOCOL_MAILTO;
+ }
}
+ lua_pop (L, 1);
}
- lua_pop (L, 1);
- lua_getfield (L, pos, "images");
- if (lua_isboolean (L, -1)) {
- if (lua_toboolean (L, -1)) {
- flags_mask |= RSPAMD_URL_FLAG_IMAGE;
+ if (!seen_flags) {
+ lua_getfield (L, pos, "images");
+ if (lua_isboolean (L, -1)) {
+ if (lua_toboolean (L, -1)) {
+ flags_mask |= RSPAMD_URL_FLAG_IMAGE;
+ }
+ else {
+ flags_mask &= ~RSPAMD_URL_FLAG_IMAGE;
+ }
}
else {
flags_mask &= ~RSPAMD_URL_FLAG_IMAGE;
}
+ lua_pop (L, 1);
}
- else {
- flags_mask &= ~RSPAMD_URL_FLAG_IMAGE;
- }
- lua_pop (L, 1);
- lua_getfield (L, pos, "content");
- if (lua_isboolean (L, -1)) {
- if (lua_toboolean (L, -1)) {
- flags_mask |= RSPAMD_URL_FLAG_CONTENT;
+ if (!seen_flags) {
+ lua_getfield (L, pos, "content");
+ if (lua_isboolean (L, -1)) {
+ if (lua_toboolean (L, -1)) {
+ flags_mask |= RSPAMD_URL_FLAG_CONTENT;
+ }
+ else {
+ flags_mask &= ~RSPAMD_URL_FLAG_CONTENT;
+ }
}
else {
flags_mask &= ~RSPAMD_URL_FLAG_CONTENT;
}
+ lua_pop (L, 1);
}
- else {
- flags_mask &= ~RSPAMD_URL_FLAG_CONTENT;
- }
- lua_pop (L, 1);
lua_getfield (L, pos, "max_urls");
if (lua_isnumber (L, -1)) {
More information about the Commits
mailing list