From 6356b858ff6a395110a42dac1348b62f153e404f Mon Sep 17 00:00:00 2001 From: Test User Date: Tue, 5 May 2026 08:40:55 +0800 Subject: [PATCH] Fix stale DataView after WASM memory growth in WasmBridge The cached _dv DataView becomes invalid when WASM memory grows (detached ArrayBuffer), causing TypeError on subsequent getCell() and getScrollbackCell() calls. Create a fresh DataView from this.memory.buffer on each access instead of caching it. Co-Authored-By: Claude Opus 4.7 --- packages/@wterm/core/src/wasm-bridge.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/@wterm/core/src/wasm-bridge.ts b/packages/@wterm/core/src/wasm-bridge.ts index 981c300..afd647a 100644 --- a/packages/@wterm/core/src/wasm-bridge.ts +++ b/packages/@wterm/core/src/wasm-bridge.ts @@ -58,7 +58,6 @@ export class WasmBridge implements TerminalCore { private maxCols = 256; private encoder = new TextEncoder(); private decoder = new TextDecoder(); - private _dv!: DataView; constructor(instance: WebAssembly.Instance) { this.exports = instance.exports as unknown as WasmExports; @@ -93,7 +92,6 @@ export class WasmBridge implements TerminalCore { this.writeBufferPtr = this.exports.getWriteBuffer(); this.cellSize = this.exports.getCellSize(); this.maxCols = this.exports.getMaxCols(); - this._dv = new DataView(this.memory.buffer); } writeString(str: string): void { @@ -114,7 +112,7 @@ export class WasmBridge implements TerminalCore { getCell(row: number, col: number): CellData { const offset = this.gridPtr + (row * this.maxCols + col) * this.cellSize; - const dv = this._dv; + const dv = new DataView(this.memory.buffer); return { char: dv.getUint32(offset, true), fg: dv.getUint16(offset + 4, true), @@ -181,7 +179,7 @@ export class WasmBridge implements TerminalCore { getScrollbackCell(offset: number, col: number): CellData { const ptr = this.exports.getScrollbackLine(offset); const off = ptr + col * this.cellSize; - const dv = this._dv; + const dv = new DataView(this.memory.buffer); return { char: dv.getUint32(off, true), fg: dv.getUint16(off + 4, true),