From dc35aef14cdf3d3f382d162967788b9064ca6935 Mon Sep 17 00:00:00 2001 From: git-srinivas Date: Sat, 23 Oct 2021 08:14:40 +0530 Subject: [PATCH] test: add tests for invalid UTF-8 Verify that `Blob.prototype.text()`, `streamConsumers.text()` and `TextDecoder.prototype.decode()` work as expected with invalid UTF-8. PR-URL: https://github.com/nodejs/node/pull/40351 Reviewed-By: Luigi Pinca Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Robert Nagy --- test/parallel/test-blob.js | 9 +++++++++ test/parallel/test-stream-consumers.js | 14 ++++++++++++++ .../test-whatwg-encoding-custom-textdecoder.js | 8 ++++++++ 3 files changed, 31 insertions(+) diff --git a/test/parallel/test-blob.js b/test/parallel/test-blob.js index 2ac91ac99c..39301e85c9 100644 --- a/test/parallel/test-blob.js +++ b/test/parallel/test-blob.js @@ -87,6 +87,15 @@ assert.throws(() => new Blob({}), { })); } +{ + const b = new Blob(['hello', new Uint8Array([0xed, 0xa0, 0x88])]); + assert.strictEqual(b.size, 8); + b.text().then(common.mustCall((text) => { + assert.strictEqual(text, 'hello\ufffd\ufffd\ufffd'); + assert.strictEqual(text.length, 8); + })); +} + { const b = new Blob( [ diff --git a/test/parallel/test-stream-consumers.js b/test/parallel/test-stream-consumers.js index 766ade1e43..4abd0f842e 100644 --- a/test/parallel/test-stream-consumers.js +++ b/test/parallel/test-stream-consumers.js @@ -13,6 +13,7 @@ const { } = require('stream/consumers'); const { + Readable, PassThrough } = require('stream'); @@ -73,6 +74,19 @@ const kArrayBuffer = setTimeout(() => passthrough.end('there'), 10); } +{ + const readable = new Readable({ + read() {} + }); + + text(readable).then((data) => { + assert.strictEqual(data, 'foo\ufffd\ufffd\ufffd'); + }); + + readable.push(new Uint8Array([0x66, 0x6f, 0x6f, 0xed, 0xa0, 0x80])); + readable.push(null); +} + { const passthrough = new PassThrough(); diff --git a/test/parallel/test-whatwg-encoding-custom-textdecoder.js b/test/parallel/test-whatwg-encoding-custom-textdecoder.js index 877cd43734..1fa65164c7 100644 --- a/test/parallel/test-whatwg-encoding-custom-textdecoder.js +++ b/test/parallel/test-whatwg-encoding-custom-textdecoder.js @@ -191,3 +191,11 @@ if (common.hasIntl) { } ); } + +// Test TextDecoder for incomplete UTF-8 byte sequence. +{ + const decoder = new TextDecoder(); + const chunk = new Uint8Array([0x66, 0x6f, 0x6f, 0xed]); + const str = decoder.decode(chunk); + assert.strictEqual(str, 'foo\ufffd'); +}