Skip to content

Commit 3d941f2

Browse files
committed
add BOM skip logic
1 parent 93aab95 commit 3d941f2

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/common/input/TextDecoder.test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,19 @@ describe('text encodings', () => {
232232
}
233233
assert(decoded, 'Ä€𝄞Ö𝄞€Ü𝄞€');
234234
});
235+
236+
it('BOMs (3 byte sequences) - advance by 2', () => {
237+
const decoder = new Utf8ToUtf32();
238+
const target = new Uint32Array(5);
239+
const utf8Data = fromByteString('\xef\xbb\xbf\xef\xbb\xbf');
240+
let decoded = '';
241+
for (let i = 0; i < utf8Data.length; i += 2) {
242+
const written = decoder.decode(utf8Data.slice(i, i + 2), target);
243+
decoded += toString(target, written);
244+
}
245+
assert.equal(decoded, '');
246+
});
247+
235248
it('test break after 3 bytes - issue #2495', () => {
236249
const decoder = new Utf8ToUtf32();
237250
const target = new Uint32Array(5);

src/common/input/TextDecoder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,8 @@ export class Utf8ToUtf32 {
192192
target[size++] = cp;
193193
}
194194
} else if (type === 3) {
195-
if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF)) {
196-
// illegal codepoint
195+
if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {
196+
// illegal codepoint or BOM
197197
} else {
198198
target[size++] = cp;
199199
}

0 commit comments

Comments
 (0)