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