diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua index 266e2aad60552e3474bd0a9cd5d3a396081a3174..0b705fee46921b71b1718c71ea60704c79e97138 100644 --- a/src/lua/bsdsocket.lua +++ b/src/lua/bsdsocket.lua @@ -584,7 +584,7 @@ local function readline_check(self, eols, limit) end end if shortest == nil and #rbuf >= limit then - return string.sub(rbuf, limit) + return string.sub(rbuf, 1, limit) end return shortest end diff --git a/test/box/bsdsocket.result b/test/box/bsdsocket.result index 1b589404087da3ac81e3cf90760790c63401d92b..b9c13042077de8644b1de954dc3ddad90763a1e8 100644 --- a/test/box/bsdsocket.result +++ b/test/box/bsdsocket.result @@ -1120,13 +1120,13 @@ lua server:close() --- - true ... -lua body = "a 10\nb 15\nx" +lua body = "a 10\nb 15\nabc" --- ... lua remaining = #body --- ... -lua server = box.socket.tcp_server("unix/", "%s", function(s) s:write(body) s:read() end) +lua server = box.socket.tcp_server("unix/", "%s", function(s) s:write(body) s:read(100500) end) --- ... lua client = box.socket.tcp_connect("unix/", "%s") @@ -1155,7 +1155,7 @@ lua remaining = remaining - #buf lua buf = client:read({ size = remaining, delimiter = "[\r\n]+"}) --- ... -lua buf == "x" +lua buf == "abc" --- - true ... diff --git a/test/box/bsdsocket.test b/test/box/bsdsocket.test index 706061dd313a868df537dbab55bae0ba958ee8b4..9e3c7454efdeaa88fc0f6d66fb13ecea1d7d616c 100644 --- a/test/box/bsdsocket.test +++ b/test/box/bsdsocket.test @@ -361,9 +361,9 @@ exec admin "lua client:close()" exec admin "lua server:close()" ## gh-658: socket:read() incorrectly handles size and delimiter together -exec admin 'lua body = "a 10\\nb 15\\nx"' +exec admin 'lua body = "a 10\\nb 15\\nabc"' exec admin 'lua remaining = #body' -exec admin 'lua server = box.socket.tcp_server("unix/", "%s", function(s) s:write(body) s:read() end)'.format(path) +exec admin 'lua server = box.socket.tcp_server("unix/", "%s", function(s) s:write(body) s:read(100500) end)'.format(path) exec admin 'lua client = box.socket.tcp_connect("unix/", "%s")'.format(path) exec admin 'lua buf = client:read({ size = remaining, delimiter = "[\\r\\n]+"})' exec admin 'lua buf == "a 10\\n"' @@ -372,7 +372,7 @@ exec admin 'lua buf = client:read({ size = remaining, delimiter = "[\\r\\n]+"})' exec admin 'lua buf == "b 15\\n"' exec admin 'lua remaining = remaining - #buf' exec admin 'lua buf = client:read({ size = remaining, delimiter = "[\\r\\n]+"})' -exec admin 'lua buf == "x"' +exec admin 'lua buf == "abc"' exec admin 'lua remaining = remaining - #buf' exec admin 'lua remaining == 0' exec admin 'lua buf = client:read({ size = remaining, delimiter = "[\\r\\n]+"})'