diff options
author | 2023-09-15 21:19:26 -0700 | |
---|---|---|
committer | 2023-09-15 21:19:26 -0700 | |
commit | cb057e61ba5cd8ab152aac3872291bf32dbf435b (patch) | |
tree | 33795a2352548c4cf9913f7f4b0c8ed52a66a743 | |
parent | b54e3f3c042bc37418a646728428910cafc502ef (diff) | |
download | bun-cb057e61ba5cd8ab152aac3872291bf32dbf435b.tar.gz bun-cb057e61ba5cd8ab152aac3872291bf32dbf435b.tar.zst bun-cb057e61ba5cd8ab152aac3872291bf32dbf435b.zip |
fix(request) handle undefined/null/empty signal on request (#5503)
* handle undefined/null/empty signal on request
* better approach
-rw-r--r-- | src/bun.js/webcore/request.zig | 3 | ||||
-rw-r--r-- | test/js/web/request/request.test.ts | 37 |
2 files changed, 38 insertions, 2 deletions
diff --git a/src/bun.js/webcore/request.zig b/src/bun.js/webcore/request.zig index fc38e1825..db073fccc 100644 --- a/src/bun.js/webcore/request.zig +++ b/src/bun.js/webcore/request.zig @@ -608,9 +608,8 @@ pub const Request = struct { } if (!fields.contains(.signal)) { - if (value.get(globalThis, "signal")) |signal_| { + if (value.getTruthy(globalThis, "signal")) |signal_| { fields.insert(.signal); - if (AbortSignal.fromJS(signal_)) |signal| { //Keep it alive signal_.ensureStillAlive(); diff --git a/test/js/web/request/request.test.ts b/test/js/web/request/request.test.ts new file mode 100644 index 000000000..ac6008eb4 --- /dev/null +++ b/test/js/web/request/request.test.ts @@ -0,0 +1,37 @@ +import { test, expect } from "bun:test"; + +test("request can receive undefined signal", async () => { + const request = new Request("http://example.com/", { + method: "POST", + headers: { + "Content-Type": "text/bun;charset=utf-8", + }, + body: "bun", + signal: undefined, + }); + expect(request.method).toBe("POST"); + // @ts-ignore + const clone = new Request(request); + expect(clone.method).toBe("POST"); + expect(clone.headers.get("content-type")).toBe("text/bun;charset=utf-8"); + expect(await request.text()).toBe("bun"); + expect(await clone.text()).toBe("bun"); +}); + +test("request can receive null signal", async () => { + const request = new Request("http://example.com/", { + method: "POST", + headers: { + "Content-Type": "text/bun;charset=utf-8", + }, + body: "bun", + signal: null, + }); + expect(request.method).toBe("POST"); + // @ts-ignore + const clone = new Request(request); + expect(clone.method).toBe("POST"); + expect(clone.headers.get("content-type")).toBe("text/bun;charset=utf-8"); + expect(await request.text()).toBe("bun"); + expect(await clone.text()).toBe("bun"); +}); |