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