authorgravatar for truemedian@gmail.comNameless <truemedian@gmail.com> 2023-10-05 13:59:16-05:00
committergravatar for truemedian@gmail.comNameless <truemedian@gmail.com> 2023-10-21 20:52:59-05:00
log16f89eab45c4356f8f1d824c342e76aee8ddff90
tree11138d99e409b20d2e046778a49073827ed07d78
parente11a8397602b23997e9ebfbd1b865dab4f6a18d1
signaturelock-open Commit is signed but in an unrecognized format.

std.http.Client: make transfer-encoding priority over content-length as per spec


1 files changed, 12 insertions(+), 12 deletions(-)

lib/std/http/Client.zig+12-12
......@@ -420,13 +420,7 @@ pub const Response = struct {
420420
421421 if (trailing) continue;
422422
423 if (std.ascii.eqlIgnoreCase(header_name, "content-length")) {
424 const content_length = std.fmt.parseInt(u64, header_value, 10) catch return error.InvalidContentLength;
425
426 if (res.content_length != null and res.content_length != content_length) return error.HttpHeadersInvalid;
427
428 res.content_length = content_length;
429 } else if (std.ascii.eqlIgnoreCase(header_name, "transfer-encoding")) {
423 if (std.ascii.eqlIgnoreCase(header_name, "transfer-encoding")) {
430424 // Transfer-Encoding: second, first
431425 // Transfer-Encoding: deflate, chunked
432426 var iter = mem.splitBackwardsScalar(u8, header_value, ',');
......@@ -458,6 +452,12 @@ pub const Response = struct {
458452 }
459453
460454 if (iter.next()) |_| return error.HttpTransferEncodingUnsupported;
455 } else if (std.ascii.eqlIgnoreCase(header_name, "content-length")) {
456 const content_length = std.fmt.parseInt(u64, header_value, 10) catch return error.InvalidContentLength;
457
458 if (res.content_length != null and res.content_length != content_length) return error.HttpHeadersInvalid;
459
460 res.content_length = content_length;
461461 } else if (std.ascii.eqlIgnoreCase(header_name, "content-encoding")) {
462462 if (res.transfer_compression != null) return error.HttpHeadersInvalid;
463463
......@@ -658,17 +658,17 @@ pub const Request = struct {
658658 .none => {},
659659 }
660660 } else {
661 if (has_content_length) {
662 const content_length = std.fmt.parseInt(u64, req.headers.getFirstValue("content-length").?, 10) catch return error.InvalidContentLength;
663
664 req.transfer_encoding = .{ .content_length = content_length };
665 } else if (has_transfer_encoding) {
661 if (has_transfer_encoding) {
666662 const transfer_encoding = req.headers.getFirstValue("transfer-encoding").?;
667663 if (std.mem.eql(u8, transfer_encoding, "chunked")) {
668664 req.transfer_encoding = .chunked;
669665 } else {
670666 return error.UnsupportedTransferEncoding;
671667 }
668 } else if (has_content_length) {
669 const content_length = std.fmt.parseInt(u64, req.headers.getFirstValue("content-length").?, 10) catch return error.InvalidContentLength;
670
671 req.transfer_encoding = .{ .content_length = content_length };
672672 } else {
673673 req.transfer_encoding = .none;
674674 }