fix(wasm): Register modules loaded via non-streaming WebAssembly APIs - #23661
fix(wasm): Register modules loaded via non-streaming WebAssembly APIs#23661andreiborza wants to merge 2 commits into
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
size-limit report 📦
|
b108f49 to
ccc54f1
Compare
ccc54f1 to
599115c
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 599115c. Configure here.
| * Looks up an image by URL in worker images. | ||
| */ | ||
| function getWorkerImage(url: string): number { | ||
| const workerImages = WINDOW._sentryWasmImages || []; |
There was a problem hiding this comment.
Missing fallback for unmatched WASM frames
Medium Severity
patchFrames still matches images only by exact code_file, but buffer-compiled modules at or below V8's 16383-byte cutoff are registered as wasm://wasm/unknown (or wasm://wasm/<name>-unknown) while engine frames use a real content hash. _fromBuffer is stored and stripped, yet never used, so those frames never get addr_mode or debug_meta. Firefox call-site names have the same gap.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 599115c. Configure here.


What
Registers WASM modules that are loaded through
WebAssembly.instantiate(buffer),WebAssembly.compile, andnew WebAssembly.Module()so their frames get symbolicated. Those modules carry no URL, so they are registered under the synthetic script name the engine reports in stack frames (wasm://wasm/<hash>), which V8 derives from the byte length for modules above 16383 bytes. Smaller modules get a placeholder name and are matched by elimination instead.Why
Non-streaming loads (the Emscripten fallback, dynamic linking, Godot Web) produced events without
debug_meta, so uploaded debug files were never applied.Closes: #19564