Skip to content

Commit 172ca18

Browse files
fix cors proxy getting binary data (e.g. png, webp) (#4030)
fixes #3266 --------- Co-authored-by: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com>
1 parent b9481d2 commit 172ca18

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

js/server_functions.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ async function cors (req, res) {
4646
const headerValue = response.headers.get(header);
4747
if (header) res.set(header, headerValue);
4848
}
49-
const data = await response.text();
50-
res.send(data);
49+
const arrayBuffer = await response.arrayBuffer();
50+
res.send(Buffer.from(arrayBuffer));
5151
} else {
5252
throw new Error(`Response status: ${response.status}`);
5353
}

tests/unit/functions/server_functions_spec.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ describe("server_functions tests", () => {
44
describe("The cors method", () => {
55
let fetchResponse;
66
let fetchResponseHeadersGet;
7-
let fetchResponseHeadersText;
7+
let fetchResponseArrayBuffer;
88
let corsResponse;
99
let request;
1010
let fetchMock;
1111

1212
beforeEach(() => {
1313
fetchResponseHeadersGet = vi.fn(() => {});
14-
fetchResponseHeadersText = vi.fn(() => {});
14+
fetchResponseArrayBuffer = vi.fn(() => {});
1515
fetchResponse = {
1616
headers: {
1717
get: fetchResponseHeadersGet
1818
},
19-
text: fetchResponseHeadersText,
19+
arrayBuffer: fetchResponseArrayBuffer,
2020
ok: true
2121
};
2222

@@ -78,7 +78,9 @@ describe("server_functions tests", () => {
7878

7979
it("Sends correct data from response", async () => {
8080
const responseData = "some data";
81-
fetchResponseHeadersText.mockImplementation(() => responseData);
81+
const encoder = new TextEncoder();
82+
const arrayBuffer = encoder.encode(responseData).buffer;
83+
fetchResponseArrayBuffer.mockImplementation(() => arrayBuffer);
8284

8385
let sentData;
8486
corsResponse.send = vi.fn((input) => {
@@ -87,19 +89,19 @@ describe("server_functions tests", () => {
8789

8890
await cors(request, corsResponse);
8991

90-
expect(fetchResponseHeadersText.mock.calls).toHaveLength(1);
91-
expect(sentData).toBe(responseData);
92+
expect(fetchResponseArrayBuffer.mock.calls).toHaveLength(1);
93+
expect(sentData).toEqual(Buffer.from(arrayBuffer));
9294
});
9395

9496
it("Sends error data from response", async () => {
9597
const error = new Error("error data");
96-
fetchResponseHeadersText.mockImplementation(() => {
98+
fetchResponseArrayBuffer.mockImplementation(() => {
9799
throw error;
98100
});
99101

100102
await cors(request, corsResponse);
101103

102-
expect(fetchResponseHeadersText.mock.calls).toHaveLength(1);
104+
expect(fetchResponseArrayBuffer.mock.calls).toHaveLength(1);
103105
expect(corsResponse.status).toHaveBeenCalledWith(500);
104106
expect(corsResponse.json).toHaveBeenCalledWith({ error: error.message });
105107
});

0 commit comments

Comments
 (0)