diff options
| author | Thijs Schreijer <thijs.schreijer@bookingexperts.com> | 2026-08-10 15:27:12 +0200 |
|---|---|---|
| committer | Thijs Schreijer <thijs@thijsschreijer.nl> | 2026-08-29 17:42:13 +0200 |
| commit | 52f9f91d91aa33a1483334f69073f3e6250cd168 (patch) | |
| tree | 5f7b6cea31c496b4ccc94f834cb9a051445780ae | |
| parent | 827ae20771d34912a8f79b50dc68e6430945b9eb (diff) | |
| download | luasocket-52f9f91d91aa33a1483334f69073f3e6250cd168.tar.gz luasocket-52f9f91d91aa33a1483334f69073f3e6250cd168.tar.bz2 luasocket-52f9f91d91aa33a1483334f69073f3e6250cd168.zip | |
refactor(receive): make implicit line reads explicit
| -rw-r--r-- | src/http.lua | 10 | ||||
| -rw-r--r-- | src/tp.lua | 4 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/http.lua b/src/http.lua index 259eb2b..2c296d4 100644 --- a/src/http.lua +++ b/src/http.lua | |||
| @@ -48,7 +48,7 @@ local function receiveheaders(sock, headers) | |||
| 48 | local line, name, value, err | 48 | local line, name, value, err |
| 49 | headers = headers or {} | 49 | headers = headers or {} |
| 50 | -- get first line | 50 | -- get first line |
| 51 | line, err = sock:receive() | 51 | line, err = sock:receive("*l") |
| 52 | if err then return nil, err end | 52 | if err then return nil, err end |
| 53 | -- headers go until a blank line is found | 53 | -- headers go until a blank line is found |
| 54 | while line ~= "" do | 54 | while line ~= "" do |
| @@ -57,12 +57,12 @@ local function receiveheaders(sock, headers) | |||
| 57 | if not (name and value) then return nil, "malformed response headers" end | 57 | if not (name and value) then return nil, "malformed response headers" end |
| 58 | name = string.lower(name) | 58 | name = string.lower(name) |
| 59 | -- get next line (value might be folded) | 59 | -- get next line (value might be folded) |
| 60 | line, err = sock:receive() | 60 | line, err = sock:receive("*l") |
| 61 | if err then return nil, err end | 61 | if err then return nil, err end |
| 62 | -- unfold any folded values | 62 | -- unfold any folded values |
| 63 | while string.find(line, "^%s") do | 63 | while string.find(line, "^%s") do |
| 64 | value = value .. line | 64 | value = value .. line |
| 65 | line, err = sock:receive() | 65 | line, err = sock:receive("*l") |
| 66 | if err then return nil, err end | 66 | if err then return nil, err end |
| 67 | end | 67 | end |
| 68 | -- save pair in table | 68 | -- save pair in table |
| @@ -82,7 +82,7 @@ socket.sourcet["http-chunked"] = function(sock, headers) | |||
| 82 | }, { | 82 | }, { |
| 83 | __call = function() | 83 | __call = function() |
| 84 | -- get chunk size, skip extension | 84 | -- get chunk size, skip extension |
| 85 | local line, err = sock:receive() | 85 | local line, err = sock:receive("*l") |
| 86 | if err then return nil, err end | 86 | if err then return nil, err end |
| 87 | local size = base.tonumber(string.gsub(line, ";.*", ""), 16) | 87 | local size = base.tonumber(string.gsub(line, ";.*", ""), 16) |
| 88 | if not size then return nil, "invalid chunk size" end | 88 | if not size then return nil, "invalid chunk size" end |
| @@ -90,7 +90,7 @@ socket.sourcet["http-chunked"] = function(sock, headers) | |||
| 90 | if size > 0 then | 90 | if size > 0 then |
| 91 | -- if not, get chunk and skip terminating CRLF | 91 | -- if not, get chunk and skip terminating CRLF |
| 92 | local chunk, err, _ = sock:receive(size) | 92 | local chunk, err, _ = sock:receive(size) |
| 93 | if chunk then sock:receive() end | 93 | if chunk then sock:receive("*l") end |
| 94 | return chunk, err | 94 | return chunk, err |
| 95 | else | 95 | else |
| 96 | -- if it was, read trailers into headers table | 96 | -- if it was, read trailers into headers table |
| @@ -26,14 +26,14 @@ _M.TIMEOUT = 60 | |||
| 26 | -- gets server reply (works for SMTP and FTP) | 26 | -- gets server reply (works for SMTP and FTP) |
| 27 | local function get_reply(c) | 27 | local function get_reply(c) |
| 28 | local code, current, sep | 28 | local code, current, sep |
| 29 | local line, err = c:receive() | 29 | local line, err = c:receive("*l") |
| 30 | local reply = line | 30 | local reply = line |
| 31 | if err then return nil, err end | 31 | if err then return nil, err end |
| 32 | code, sep = socket.skip(2, string.find(line, "^(%d%d%d)(.?)")) | 32 | code, sep = socket.skip(2, string.find(line, "^(%d%d%d)(.?)")) |
| 33 | if not code then return nil, "invalid server reply" end | 33 | if not code then return nil, "invalid server reply" end |
| 34 | if sep == "-" then -- reply is multiline | 34 | if sep == "-" then -- reply is multiline |
| 35 | repeat | 35 | repeat |
| 36 | line, err = c:receive() | 36 | line, err = c:receive("*l") |
| 37 | if err then return nil, err end | 37 | if err then return nil, err end |
| 38 | current, sep = socket.skip(2, string.find(line, "^(%d%d%d)(.?)")) | 38 | current, sep = socket.skip(2, string.find(line, "^(%d%d%d)(.?)")) |
| 39 | reply = reply .. "\n" .. line | 39 | reply = reply .. "\n" .. line |
