From 2e14aa473ea20b485ed18f71c6ede2099c7b23cb Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 13 May 2015 17:41:50 +0100 Subject: [PATCH] Fix regexp splitting in lua. --- src/lua/lua_regexp.c | 11 +++++++++++ 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) -- 2.39.5