Skip to content

Commit 458281c

Browse files
committed
Send 413 reply on body too large
karlseguin#107
1 parent 652748b commit 458281c

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

src/httpz.zig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -964,6 +964,15 @@ test "httpz: invalid content length value (2)" {
964964
try t.expectString("HTTP/1.1 400 \r\nConnection: Close\r\nContent-Length: 15\r\n\r\nInvalid Request", testReadAll(stream, &buf));
965965
}
966966

967+
test "httpz: body too big" {
968+
const stream = testStream(5993);
969+
defer stream.close();
970+
try stream.writeAll("POST / HTTP/1.1\r\nContent-Length: 999999999999999999\r\n\r\n");
971+
972+
var buf: [100]u8 = undefined;
973+
try t.expectString("HTTP/1.1 413 \r\nConnection: Close\r\nContent-Length: 23\r\n\r\nRequest body is too big", testReadAll(stream, &buf));
974+
}
975+
967976
test "httpz: overflow content length" {
968977
const stream = testStream(5992);
969978
defer stream.close();

src/request.zig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,6 @@ pub const State = struct {
975975
if (cl == 0) return true;
976976

977977
if (self.lazy_read_size == null and cl > self.max_body_size) {
978-
metrics.bodyTooBig();
979978
return error.BodyTooBig;
980979
}
981980

src/worker.zig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,10 @@ fn requestError(conn: *HTTPConn, err: anyerror) !void {
17211721
metrics.invalidRequest();
17221722
return writeError(handle, 400, "Invalid Request");
17231723
},
1724+
error.BodyTooBig => {
1725+
metrics.bodyTooBig();
1726+
return writeError(handle, 413, "Request body is too big");
1727+
},
17241728
error.BrokenPipe, error.ConnectionClosed, error.ConnectionResetByPeer => return,
17251729
else => {
17261730
log.err("server error: {}", .{err});

0 commit comments

Comments
 (0)