Skip to content

Commit 684c314

Browse files
committed
[scramjet/core] temp textdecoder fix
1 parent 89db266 commit 684c314

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

packages/scramjet/packages/core/src/shared/rewriters/js.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { flagEnabled, ScramjetContext } from "@/shared";
1+
import { flagEnabled, safeDecode, ScramjetContext } from "@/shared";
22
import { URLMeta } from "@rewriters/url";
33

44
import { getRewriter, JsRewriterOutput, textDecoder } from "@rewriters/wasm";
@@ -72,7 +72,7 @@ function rewriteJsWasm(
7272
const { js, map, scramtag, errors } = out;
7373

7474
return {
75-
js: typeof input === "string" ? textDecoder.decode(js) : js,
75+
js: typeof input === "string" ? safeDecode(js) : js,
7676
tag: scramtag,
7777
map,
7878
errors,
@@ -109,7 +109,7 @@ export function rewriteJs(
109109
pushmap(Array.from(res.map), res.tag);
110110
} else {
111111
if (newjs instanceof Uint8Array) {
112-
newjs = new TextDecoder().decode(newjs);
112+
newjs = safeDecode(newjs);
113113
}
114114
const sourcemapfn = `${context.config.globals.pushsourcemapfn}([${res.map.join(",")}], "${res.tag}");`;
115115

@@ -135,7 +135,7 @@ export function rewriteJs(
135135
"failed rewriting js for",
136136
url || "(unknown)",
137137
err.message,
138-
js instanceof Uint8Array ? textDecoder.decode(js) : js
138+
js instanceof Uint8Array ? safeDecode(js) : js
139139
);
140140
if (flagEnabled("allowInvalidJs", context, meta.base)) {
141141
return js;

packages/scramjet/packages/core/src/shared/rewriters/url.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ export function rewriteUrl(
108108
} else if (url.startsWith("blob:")) {
109109
return context.prefix.href + url;
110110
} else if (url.startsWith("data:")) {
111+
return url;
111112
const URL_MAX_LENGTH = 1024 * 1024 * 2;
112113
const BUFFER = 1024;
113114
// chrome will explode if you make a request to a service worker with a 2MB+ URL

packages/scramjet/packages/core/src/shared/rewriters/wasm.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,15 @@ function allocString(value: string): { ptr: number; len: number } {
104104
return allocBytes(textEncoder.encode(value));
105105
}
106106

107+
const _decode = TextDecoder.prototype.decode;
108+
export function safeDecode(u8: Uint8Array) {
109+
return _decode.call(textDecoder, u8);
110+
}
111+
107112
function decode(ptr: number, len: number): string {
108113
if (!ptr || !len) return "";
109114
const exports = assertWasm();
110-
return textDecoder.decode(new Uint8Array(exports.memory.buffer, ptr, len));
115+
return safeDecode(new Uint8Array(exports.memory.buffer, ptr, len));
111116
}
112117

113118
function free(ptr: number, len: number) {
@@ -319,7 +324,7 @@ function initWasm() {
319324
if (![...wasm_u8.slice(0, 4)].every((x, i) => x === MAGIC[i]))
320325
throw new Error(
321326
"rewriter wasm does not have wasm magic (was it fetched correctly?)\nrewriter wasm contents: " +
322-
textDecoder.decode(wasm_u8)
327+
safeDecode(wasm_u8)
323328
);
324329

325330
initSync(new WebAssembly.Module(wasm_u8 as unknown as BufferSource));

0 commit comments

Comments
 (0)