Skip to content

Commit c23d45c

Browse files
committed
fix(build): eagerly initialize stdout/stderr in esbuild-wasm to prevent V8 crash
1 parent ed4d357 commit c23d45c

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

packages/build/src/esbuild.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,15 +197,23 @@ function copyEsbuildWasmFiles(nodeModulesDir: string, distDir: string): void {
197197
]
198198

199199
for (const { src, dest } of filesToCopy) {
200-
fs.copyFileSync(src, dest)
201-
202-
// Make CLI executable.
203200
if (src.endsWith("esbuild")) {
201+
// Read the esbuild binary, patch it to prevent the V8 crash (crbug.com/1201626)
202+
// by eagerly initializing process.stdout.fd and process.stderr.fd on line 2
203+
// before WebAssembly execution takes place.
204+
let content = fs.readFileSync(src, "utf8")
205+
content = content.replace(
206+
/^(#!.*$)/m,
207+
"$1\n// Eagerly initialize stdout/stderr to avoid V8 crash (crbug.com/1201626) inside WASM stack\nconst _ = [process.stdout.fd, process.stderr.fd];",
208+
)
209+
fs.writeFileSync(dest, content)
204210
try {
205211
fs.chmodSync(dest, 0o755)
206212
} catch {
207213
// Ignore chmod errors on Windows.
208214
}
215+
} else {
216+
fs.copyFileSync(src, dest)
209217
}
210218
}
211219

0 commit comments

Comments
 (0)