Skip to content

Commit 59b4033

Browse files
Merge pull request #1052 from lightpanda-io/fix-auth-interception-overflow
Fix auth interception integer overflow
2 parents a87f4ab + eae8a90 commit 59b4033

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

.github/workflows/e2e-test.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,15 @@ jobs:
108108
go run runner/main.go
109109
kill `cat LPD.pid` `cat PROXY.id`
110110
111+
- name: run request interception through proxy
112+
run: |
113+
export PROXY_USERNAME=username PROXY_PASSWORD=password
114+
./proxy/proxy & echo $! > PROXY.id
115+
./lightpanda serve & echo $! > LPD.pid
116+
URL=https://demo-browser.lightpanda.io/campfire-commerce/ node puppeteer/proxy_auth.js
117+
BASE_URL=https://demo-browser.lightpanda.io/ node playwright/proxy_auth.js
118+
kill `cat LPD.pid` `cat PROXY.id`
119+
111120
cdp-and-hyperfine-bench:
112121
name: cdp-and-hyperfine-bench
113122
needs: zig-build-release

src/http/Client.zig

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ pub fn request(self: *Client, req: Request) !void {
202202
notification.dispatch(.http_request_intercept, &.{ .transfer = transfer, .wait_for_interception = &wait_for_interception });
203203
if (wait_for_interception) {
204204
self.intercepted += 1;
205+
log.debug(.http, "wait for interception", .{ .intercepted = self.intercepted });
205206
if (builtin.mode == .Debug) {
206207
transfer._intercepted = true;
207208
}
@@ -230,6 +231,7 @@ pub fn continueTransfer(self: *Client, transfer: *Transfer) !void {
230231
std.debug.assert(transfer._intercepted);
231232
}
232233
self.intercepted -= 1;
234+
log.debug(.http, "continue transfer", .{ .intercepted = self.intercepted });
233235
return self.process(transfer);
234236
}
235237

@@ -239,6 +241,7 @@ pub fn abortTransfer(self: *Client, transfer: *Transfer) void {
239241
std.debug.assert(transfer._intercepted);
240242
}
241243
self.intercepted -= 1;
244+
log.debug(.http, "abort transfer", .{ .intercepted = self.intercepted });
242245
transfer.abort();
243246
}
244247

@@ -248,6 +251,7 @@ pub fn fulfillTransfer(self: *Client, transfer: *Transfer, status: u16, headers:
248251
std.debug.assert(transfer._intercepted);
249252
}
250253
self.intercepted -= 1;
254+
log.debug(.http, "filfull transfer", .{ .intercepted = self.intercepted });
251255
return transfer.fulfill(status, headers, body);
252256
}
253257

@@ -440,6 +444,11 @@ fn processMessages(self: *Client) !void {
440444
// In this case we ignore callbacks for now.
441445
// Note: we don't deinit transfer on purpose: we want to keep
442446
// using it for the following request.
447+
self.intercepted += 1;
448+
log.debug(.http, "wait for auth interception", .{ .intercepted = self.intercepted });
449+
if (builtin.mode == .Debug) {
450+
transfer._intercepted = true;
451+
}
443452
self.endTransfer(transfer);
444453
continue;
445454
}
@@ -811,6 +820,11 @@ pub const Transfer = struct {
811820
// abort. We don't call self.client.endTransfer here b/c it has been done
812821
// before interception process.
813822
pub fn abortAuthChallenge(self: *Transfer) void {
823+
if (builtin.mode == .Debug) {
824+
std.debug.assert(self._intercepted);
825+
}
826+
self.client.intercepted -= 1;
827+
log.debug(.http, "abort auth transfer", .{ .intercepted = self.client.intercepted });
814828
self.client.requestFailed(self, error.AbortAuthChallenge);
815829
self.deinit();
816830
}

0 commit comments

Comments
 (0)