]> source.dussan.org Git - rspamd.git/commitdiff
Fix regexp splitting in lua.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 13 May 2015 16:41:50 +0000 (17:41 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 13 May 2015 16:41:50 +0000 (17:41 +0100)
src/lua/lua_regexp.c
test/lua/unit/regxep.lua

index 48af6f7ab26592789f25f076939f785077c83978..18ceeb28a09ef064bc1e27f87312414f355f782a 100644 (file)
@@ -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);
index 8cc2db2bdcd523552cfd3efa5c86275fa08a2ba3..3aca6c7ba4593125503fe3a5343f89276dd92540 100644 (file)
@@ -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)