http: protect against zero-length chunks

A zero-length chunk marks the end of the body, so prevent any from
possibly occurring in the middle of the body.
This commit is contained in:
Jacob Young 2024-02-08 00:29:53 +01:00 committed by Andrew Kelley
parent 3122fd0ba0
commit 919a3bae1c

View file

@ -1018,9 +1018,11 @@ pub const Request = struct {
pub fn write(req: *Request, bytes: []const u8) WriteError!usize { pub fn write(req: *Request, bytes: []const u8) WriteError!usize {
switch (req.transfer_encoding) { switch (req.transfer_encoding) {
.chunked => { .chunked => {
if (bytes.len > 0) {
try req.connection.?.writer().print("{x}\r\n", .{bytes.len}); try req.connection.?.writer().print("{x}\r\n", .{bytes.len});
try req.connection.?.writer().writeAll(bytes); try req.connection.?.writer().writeAll(bytes);
try req.connection.?.writer().writeAll("\r\n"); try req.connection.?.writer().writeAll("\r\n");
}
return bytes.len; return bytes.len;
}, },