From ed50fc346b9c58459bf4e6fe5c45e8d34faac8da Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sat, 6 Nov 2021 07:43:40 +0100 Subject: [PATCH] fix: fix payload encoding for v3 clients The v3 parser (used for compatibility with older clients) was broken during the migration to TypeScript ([1]). This was not caught in the test suite because the Node.js client does not support binary packet in polling mode (packets are base64-encoded). [1]: https://github.com/socketio/engine.io/commit/c0d6eaa1ba1291946dc8425d5f533d5f721862dd Backported from 6.0.x branch: https://github.com/socketio/engine.io/commit/3f42262fd27a77a7383cdbb44ede7c6211a9782b --- lib/parser-v3/utf8.ts | 2 +- test/parser.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/parser.js diff --git a/lib/parser-v3/utf8.ts b/lib/parser-v3/utf8.ts index 9a9decbd3..b878740ff 100644 --- a/lib/parser-v3/utf8.ts +++ b/lib/parser-v3/utf8.ts @@ -203,7 +203,7 @@ function utf8decode(byteString, opts) { return ucs2encode(codePoints); } -export default { +module.exports = { version: '2.1.2', encode: utf8encode, decode: utf8decode diff --git a/test/parser.js b/test/parser.js new file mode 100644 index 000000000..3f967e1b7 --- /dev/null +++ b/test/parser.js @@ -0,0 +1,22 @@ +const expect = require("expect.js"); +const parser = require("../build/parser-v3/index.js"); + +describe("parser", () => { + it("properly encodes a mixed payload", done => { + parser.encodePayload( + [ + { type: "message", data: "€€€€" }, + { type: "message", data: Buffer.from([1, 2, 3]) } + ], + true, + encoded => { + expect(encoded).to.be.a(Buffer); + + parser.decodePayload(encoded, decoded => { + expect(decoded.data).to.eql("€€€€"); + done(); + }); + } + ); + }); +});