diff --git a/src/browser/tests/net/request.html b/src/browser/tests/net/request.html index b57ec848b..4c3cf53b4 100644 --- a/src/browser/tests/net/request.html +++ b/src/browser/tests/net/request.html @@ -453,3 +453,10 @@ testing.expectEqual(1024, requests.length); testing.expectEqual('https://example.com/1023', requests[1023].url); + + diff --git a/src/browser/tests/net/xhr.html b/src/browser/tests/net/xhr.html index 9051f7a39..6e944c946 100644 --- a/src/browser/tests/net/xhr.html +++ b/src/browser/tests/net/xhr.html @@ -575,6 +575,11 @@ req.setRequestHeader('X-Multi', 'b'); req.setRequestHeader('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64)'); req.setRequestHeader('Sec-Ch-Ua', '"Chromium";v="140"'); + // forbidden request headers are silently ignored + req.setRequestHeader('Cookie', 'injected=1'); + req.setRequestHeader('Proxy-Test', '1'); + req.setRequestHeader('Sec-Test', '1'); + req.setRequestHeader('X-HTTP-Method-Override', 'TRACE'); req.send(); await state.done(() => { @@ -589,6 +594,10 @@ testing.expectEqual(false, got['user-agent'].includes('Mozilla')); testing.expectEqual(true, got['sec-ch-ua'].includes('Lightpanda')); testing.expectEqual(false, got['sec-ch-ua'].includes('Chromium')); + testing.expectEqual(false, (got['cookie'] ?? '').includes('injected')); + testing.expectEqual(undefined, got['proxy-test']); + testing.expectEqual(undefined, got['sec-test']); + testing.expectEqual(undefined, got['x-http-method-override']); }); } diff --git a/src/browser/webapi/net/Request.zig b/src/browser/webapi/net/Request.zig index b02b4ca68..db2143d1a 100644 --- a/src/browser/webapi/net/Request.zig +++ b/src/browser/webapi/net/Request.zig @@ -240,7 +240,7 @@ pub fn acquireRef(self: *Request) void { fn parseMethod(method: []const u8, exec: *const Execution) !http.Method { if (method.len > "propfind".len) { - return error.InvalidMethod; + return error.TypeError; } const lower = std.ascii.lowerString(exec.buf, method); @@ -255,7 +255,7 @@ fn parseMethod(method: []const u8, exec: *const Execution) !http.Method { .{ "options", .OPTIONS }, .{ "propfind", .PROPFIND }, }); - return method_lookup.get(lower) orelse return error.InvalidMethod; + return method_lookup.get(lower) orelse return error.TypeError; } pub fn getUrl(self: *const Request) []const u8 { diff --git a/src/browser/webapi/net/XMLHttpRequest.zig b/src/browser/webapi/net/XMLHttpRequest.zig index be076fd0d..3c13fa9c1 100644 --- a/src/browser/webapi/net/XMLHttpRequest.zig +++ b/src/browser/webapi/net/XMLHttpRequest.zig @@ -120,7 +120,7 @@ pub fn init(exec: *const Execution) !*XMLHttpRequest { ._exec = exec, ._arena = arena, ._proto = undefined, - ._request_headers = try Headers.init(null, exec), + ._request_headers = try Headers.initGuarded(null, .request, exec), }); return self; } @@ -861,7 +861,7 @@ test "parseMethod: accepts known methods case-insensitively" { } test "WebApi: XHR" { - testing.expectLog(&.{ .http, .http, .http }); + testing.expectLog(&.{ .http, .http }); try testing.htmlRunner("net/xhr.html", .{}); }