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]+"})