From 351ba8245b1aac795646d7e7a9001c8e1d0cc9f2 Mon Sep 17 00:00:00 2001 From: Mauricio Narvaez Date: Fri, 6 Jan 2023 02:26:29 -0800 Subject: [PATCH] fix: properly encode empty buffer in base64 encoding (#131) An empty buffer was encoded into `bundefined` instead of `b` (reproduced on Chrome v108 / Ubuntu). Co-authored-by: Mauricio Narvaez --- lib/encodePacket.browser.ts | 2 +- test/browser.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/encodePacket.browser.ts b/lib/encodePacket.browser.ts index e1c522e..39e406a 100644 --- a/lib/encodePacket.browser.ts +++ b/lib/encodePacket.browser.ts @@ -45,7 +45,7 @@ const encodeBlobAsBase64 = ( const fileReader = new FileReader(); fileReader.onload = function() { const content = (fileReader.result as string).split(",")[1]; - callback("b" + content); + callback("b" + (content || "")); }; return fileReader.readAsDataURL(data); }; diff --git a/test/browser.ts b/test/browser.ts index 1c630d3..3c991d1 100644 --- a/test/browser.ts +++ b/test/browser.ts @@ -97,6 +97,18 @@ describe("engine.io-parser (browser only)", () => { done(); }); }); + + it("should encode/decode a string + a 0-length ArrayBuffer payload", done => { + const packets: Packet[] = [ + { type: "message", data: "test" }, + { type: "message", data: createArrayBuffer([]) } + ]; + encodePayload(packets, payload => { + expect(payload).to.eql("4test\x1eb"); + expect(decodePayload(payload, "arraybuffer")).to.eql(packets); + done(); + }); + }); } }); });