login

<     >

2023-08-18 16:50:15 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

tcp: fix string length overflow

diff --git a/lib/ludweb/tcp.lua b/lib/ludweb/tcp.lua
index 6617216..371eed7 100644
--- a/lib/ludweb/tcp.lua
+++ b/lib/ludweb/tcp.lua
@@ -142,21 +142,23 @@ function TCP:run()
                 curfds = curfds + 1
             else
                 local size = C.recv(evs[n].data.fd, buffer, buflen, 0)
-                datain[n] = (datain[n] or "") .. ffi.string(buffer, size)
-                if self:request_ready(datain[n]) then
-                    local dataout, keep_alive = self:process(datain[n])
-                    if dataout == nil then
-                        running = false
-                    else
-                        C.send(evs[n].data.fd, dataout, #dataout, 0)
+                if size > 0 then
+                    datain[n] = (datain[n] or "") .. ffi.string(buffer, size)
+                    if self:request_ready(datain[n]) then
+                        local dataout, keep_alive = self:process(datain[n])
+                        if dataout == nil then
+                            running = false
+                        else
+                            C.send(evs[n].data.fd, dataout, #dataout, 0)
+                        end
+                        if not keep_alive then
+                            C.epoll_ctl(efd, C.EPOLL_CTL_DEL, evs[n].data.fd, ev)
+                            C.shutdown(evs[n].data.fd, C.SHUT_RDWR)
+                            curfds = curfds - 1
+                            C.close(evs[n].data.fd)
+                        end
+                        datain[n] = ""
                     end
-                    if not keep_alive then
-                        C.epoll_ctl(efd, C.EPOLL_CTL_DEL, evs[n].data.fd, ev)
-                        C.shutdown(evs[n].data.fd, C.SHUT_RDWR)
-                        curfds = curfds - 1
-                        C.close(evs[n].data.fd)
-                    end
-                    datain[n] = ""
                 end
             end
         end