authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-02-16 19:15:17-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-02-23 02:37:11-07:00
logddb754ff2fd29298dd1b6c9f4a8619ce4f960e36
treee89a5c8165b912c97d6a7d1461925ffebb3c2414
parentae630b695e1306ae357a900a44732912eac2a417

std.http: fix parsing incorrect tokenization


2 files changed, 8 insertions(+), 5 deletions(-)

lib/std/http/Client.zig+1
......@@ -545,6 +545,7 @@ pub const Response = struct {
545545 }
546546 }
547547 }
548 return error.HttpHeadersInvalid; // missing empty line
548549 }
549550
550551 inline fn int64(array: *const [8]u8) u64 {
lib/std/http/Server.zig+7-5
......@@ -197,9 +197,9 @@ pub const Request = struct {
197197 };
198198
199199 pub fn parse(req: *Request, bytes: []const u8) ParseError!void {
200 var it = mem.tokenizeAny(u8, bytes, "\r\n");
200 var it = mem.splitSequence(u8, bytes, "\r\n");
201201
202 const first_line = it.next() orelse return error.HttpHeadersInvalid;
202 const first_line = it.next().?;
203203 if (first_line.len < 10)
204204 return error.HttpHeadersInvalid;
205205
......@@ -229,15 +229,16 @@ pub const Request = struct {
229229 req.version = version;
230230
231231 while (it.next()) |line| {
232 if (line.len == 0) return error.HttpHeadersInvalid;
232 if (line.len == 0) return;
233233 switch (line[0]) {
234234 ' ', '\t' => return error.HttpHeaderContinuationsUnsupported,
235235 else => {},
236236 }
237237
238 var line_it = mem.tokenizeAny(u8, line, ": ");
239 const header_name = line_it.next() orelse return error.HttpHeadersInvalid;
238 var line_it = mem.splitSequence(u8, line, ": ");
239 const header_name = line_it.next().?;
240240 const header_value = line_it.rest();
241 if (header_value.len == 0) return error.HttpHeadersInvalid;
241242
242243 if (std.ascii.eqlIgnoreCase(header_name, "connection")) {
243244 req.keep_alive = !std.ascii.eqlIgnoreCase(header_value, "close");
......@@ -291,6 +292,7 @@ pub const Request = struct {
291292 if (iter.next()) |_| return error.HttpTransferEncodingUnsupported;
292293 }
293294 }
295 return error.HttpHeadersInvalid; // missing empty line
294296 }
295297
296298 inline fn int64(array: *const [8]u8) u64 {