Consume truncated UTF-8 tails as one malformed sequence while preserving existing behavior for encoded surrogate code points. This keeps lazy SourceCode decoding and bytecode cache source hashing aligned with eager source text decoding for invalid cached script source bytes. Continue stripping an initial UTF-8 byte order mark in UTF8Decoder::to_utf8() so HTML parsing keeps matching the previous String-based implementation. Cover the shared decoder behavior and the TextDecoder API surface.
19 lines
734 B
HTML
19 lines
734 B
HTML
<!DOCTYPE html>
|
|
<script src="../include.js"></script>
|
|
<script>
|
|
test(() => {
|
|
try {
|
|
let decoder = new TextDecoder("utf-8");
|
|
println(`[${decoder.decode(new Uint8Array([0x41, 0x42, 0x43]))}]`); // "ABC"
|
|
println(`[${decoder.decode()}]`);
|
|
|
|
const surrogate = decoder.decode(new Uint8Array([0xed, 0xa0, 0x80])); // U+D800
|
|
println(`[${surrogate.codePointAt(0).toString(16)}]`);
|
|
|
|
const truncatedTail = decoder.decode(new Uint8Array([0xf0, 0x9f, 0x98]));
|
|
println(`[${truncatedTail.length}, ${truncatedTail.codePointAt(0).toString(16)}]`);
|
|
} catch (e) {
|
|
println("ERROR: " + e.name + ": " + e.message);
|
|
}
|
|
});
|
|
</script>
|