aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-05-13 17:41:50 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-05-13 17:41:50 +0100
commit2e14aa473ea20b485ed18f71c6ede2099c7b23cb (patch)
treea409f28a03b9d4011bacfc722a59c1926ac9f490
parent6d40820bdeef5882dc91f7c7979f01a4cc94b824 (diff)
downloadrspamd-2e14aa473ea20b485ed18f71c6ede2099c7b23cb.tar.gz
rspamd-2e14aa473ea20b485ed18f71c6ede2099c7b23cb.zip
Fix regexp splitting in lua.
-rw-r--r--src/lua/lua_regexp.c11
-rw-r--r--test/lua/unit/regxep.lua8
2 files changed, 16 insertions, 3 deletions
diff --git a/src/lua/lua_regexp.c b/src/lua/lua_regexp.c
index 48af6f7ab..18ceeb28a 100644
--- a/src/lua/lua_regexp.c
+++ b/src/lua/lua_regexp.c
@@ -491,6 +491,17 @@ lua_regexp_split (lua_State *L)
}
old_start = end;
}
+
+ if (len > 0 && (end == NULL || end < data + len)) {
+ if (end == NULL) {
+ end = data;
+ }
+
+ lua_pushlstring (L, end, (data + len) - end);
+ lua_rawseti (L, -2, ++i);
+ matched = TRUE;
+ }
+
if (!matched) {
lua_pop (L, 1);
lua_pushnil (L);
diff --git a/test/lua/unit/regxep.lua b/test/lua/unit/regxep.lua
index 8cc2db2bd..3aca6c7ba 100644
--- a/test/lua/unit/regxep.lua
+++ b/test/lua/unit/regxep.lua
@@ -34,10 +34,12 @@ context("Regexp unit tests", function()
test("Regexp split", function()
local cases = {
+ {'\\s', 'one', {'one'}}, -- one arg
{'\\s', 'one two', {'one', 'two'}}, -- trivial
+ {'/,/i', '1,2', {'1', '2'}}, -- trivial
{'\\s', 'one two', {'one', 'two'}}, -- multiple delimiters
{'\\s', ' one two ', {'one', 'two'}}, -- multiple delimiters
- {'\\s', ' one ', {'one', 'two'}}, -- multiple delimiters
+ {'\\s', ' one ', {'one'}}, -- multiple delimiters
{'[:,]', ',,,:::one,two,,', {'one', 'two'}}, -- multiple delimiters
}
@@ -48,8 +50,8 @@ context("Regexp unit tests", function()
local res = r:split(c[2])
assert_not_nil(res, "cannot split " .. c[2])
- for i,r in ipairs(res) do
- assert_equal(r, c[3][i])
+ for i,r in ipairs(c[3]) do
+ assert_equal(res[i], r)
end
end
end)