diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua index 0b20e1d3ea132e7602eee78fbac85f754cec91db..eb77a3af0cd62554d801a8490595fe3fa0fb78e4 100644 --- a/src/lua/bsdsocket.lua +++ b/src/lua/bsdsocket.lua @@ -579,7 +579,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 dffcba6f94adf007457bfc5541361e5bf008b548..5ef12fd2ebb1399b96800390a8c81b2d9b029a4f 100644 --- a/test/box/bsdsocket.result +++ b/test/box/bsdsocket.result @@ -1378,7 +1378,7 @@ server:close() - true ... -- gh-658: socket:read() incorrectly handles size and delimiter together -body = "a 10\nb 15\nx" +body = "a 10\nb 15\nabc" --- ... remaining = #body @@ -1387,7 +1387,7 @@ remaining = #body --# setopt delimiter ';' server = socket.tcp_server('unix/', path, function(s) s:write(body) - s:read() + s:read(100500) end); --- ... @@ -1418,7 +1418,7 @@ remaining = remaining - #buf buf = client:read({ size = remaining, delimiter = "[\r\n]+"}) --- ... -buf == "x" +buf == "abc" --- - true ... diff --git a/test/box/bsdsocket.test.lua b/test/box/bsdsocket.test.lua index 1e92265de8e8184c11a7ba1cf8fc1ef88d6e6316..98ac0a4d2200e84ee7a28a3053135e794259db28 100644 --- a/test/box/bsdsocket.test.lua +++ b/test/box/bsdsocket.test.lua @@ -463,12 +463,12 @@ client:read{ line = { "\n\n", "\r\n\r\n" } } server:close() -- gh-658: socket:read() incorrectly handles size and delimiter together -body = "a 10\nb 15\nx" +body = "a 10\nb 15\nabc" remaining = #body --# setopt delimiter ';' server = socket.tcp_server('unix/', path, function(s) s:write(body) - s:read() + s:read(100500) end); --# setopt delimiter '' client = socket.tcp_connect('unix/', path) @@ -479,7 +479,7 @@ buf = client:read({ size = remaining, delimiter = "[\r\n]+"}) buf == "b 15\n" remaining = remaining - #buf buf = client:read({ size = remaining, delimiter = "[\r\n]+"}) -buf == "x" +buf == "abc" remaining = remaining - #buf remaining == 0 buf = client:read({ size = remaining, delimiter = "[\r\n]+"})