diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-05-13 17:41:50 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-05-13 17:41:50 +0100 |
commit | 2e14aa473ea20b485ed18f71c6ede2099c7b23cb (patch) | |
tree | a409f28a03b9d4011bacfc722a59c1926ac9f490 | |
parent | 6d40820bdeef5882dc91f7c7979f01a4cc94b824 (diff) | |
download | rspamd-2e14aa473ea20b485ed18f71c6ede2099c7b23cb.tar.gz rspamd-2e14aa473ea20b485ed18f71c6ede2099c7b23cb.zip |
Fix regexp splitting in lua.
-rw-r--r-- | src/lua/lua_regexp.c | 11 | ||||
-rw-r--r-- | test/lua/unit/regxep.lua | 8 |
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) |