Merge pull request #1052 from lightpanda-io/fix-auth-interception-overflow

Fix auth interception integer overflow
This commit is contained in:
Pierre Tachoire
2025-09-16 16:31:07 +02:00
committed by GitHub
2 changed files with 23 additions and 0 deletions

View File

@@ -108,6 +108,15 @@ jobs:
go run runner/main.go go run runner/main.go
kill `cat LPD.pid` `cat PROXY.id` kill `cat LPD.pid` `cat PROXY.id`
- name: run request interception through proxy
run: |
export PROXY_USERNAME=username PROXY_PASSWORD=password
./proxy/proxy & echo $! > PROXY.id
./lightpanda serve & echo $! > LPD.pid
URL=https://demo-browser.lightpanda.io/campfire-commerce/ node puppeteer/proxy_auth.js
BASE_URL=https://demo-browser.lightpanda.io/ node playwright/proxy_auth.js
kill `cat LPD.pid` `cat PROXY.id`
cdp-and-hyperfine-bench: cdp-and-hyperfine-bench:
name: cdp-and-hyperfine-bench name: cdp-and-hyperfine-bench
needs: zig-build-release needs: zig-build-release

View File

@@ -202,6 +202,7 @@ pub fn request(self: *Client, req: Request) !void {
notification.dispatch(.http_request_intercept, &.{ .transfer = transfer, .wait_for_interception = &wait_for_interception }); notification.dispatch(.http_request_intercept, &.{ .transfer = transfer, .wait_for_interception = &wait_for_interception });
if (wait_for_interception) { if (wait_for_interception) {
self.intercepted += 1; self.intercepted += 1;
log.debug(.http, "wait for interception", .{ .intercepted = self.intercepted });
if (builtin.mode == .Debug) { if (builtin.mode == .Debug) {
transfer._intercepted = true; transfer._intercepted = true;
} }
@@ -230,6 +231,7 @@ pub fn continueTransfer(self: *Client, transfer: *Transfer) !void {
std.debug.assert(transfer._intercepted); std.debug.assert(transfer._intercepted);
} }
self.intercepted -= 1; self.intercepted -= 1;
log.debug(.http, "continue transfer", .{ .intercepted = self.intercepted });
return self.process(transfer); return self.process(transfer);
} }
@@ -239,6 +241,7 @@ pub fn abortTransfer(self: *Client, transfer: *Transfer) void {
std.debug.assert(transfer._intercepted); std.debug.assert(transfer._intercepted);
} }
self.intercepted -= 1; self.intercepted -= 1;
log.debug(.http, "abort transfer", .{ .intercepted = self.intercepted });
transfer.abort(); transfer.abort();
} }
@@ -248,6 +251,7 @@ pub fn fulfillTransfer(self: *Client, transfer: *Transfer, status: u16, headers:
std.debug.assert(transfer._intercepted); std.debug.assert(transfer._intercepted);
} }
self.intercepted -= 1; self.intercepted -= 1;
log.debug(.http, "filfull transfer", .{ .intercepted = self.intercepted });
return transfer.fulfill(status, headers, body); return transfer.fulfill(status, headers, body);
} }
@@ -440,6 +444,11 @@ fn processMessages(self: *Client) !void {
// In this case we ignore callbacks for now. // In this case we ignore callbacks for now.
// Note: we don't deinit transfer on purpose: we want to keep // Note: we don't deinit transfer on purpose: we want to keep
// using it for the following request. // using it for the following request.
self.intercepted += 1;
log.debug(.http, "wait for auth interception", .{ .intercepted = self.intercepted });
if (builtin.mode == .Debug) {
transfer._intercepted = true;
}
self.endTransfer(transfer); self.endTransfer(transfer);
continue; continue;
} }
@@ -811,6 +820,11 @@ pub const Transfer = struct {
// abort. We don't call self.client.endTransfer here b/c it has been done // abort. We don't call self.client.endTransfer here b/c it has been done
// before interception process. // before interception process.
pub fn abortAuthChallenge(self: *Transfer) void { pub fn abortAuthChallenge(self: *Transfer) void {
if (builtin.mode == .Debug) {
std.debug.assert(self._intercepted);
}
self.client.intercepted -= 1;
log.debug(.http, "abort auth transfer", .{ .intercepted = self.client.intercepted });
self.client.requestFailed(self, error.AbortAuthChallenge); self.client.requestFailed(self, error.AbortAuthChallenge);
self.deinit(); self.deinit();
} }