Skip to content

Non-streaming WebAssembly APIs are not intercepted breaking symbolication #19564

Closed

Description

@limbonaut

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/wasm

SDK Version

2b79e29

Framework Version

N/A (plain browser JS + Emscripten WASM)

Link to Sentry event

https://sentry-sdks.sentry.io/issues/7296298931/events/86fe929d3bd942dea18b2536af515eb3/

Reproduction Example/SDK Setup

Minimal reproduction project attached as ZIP (see README):
wasm-symbolication.zip

Sentry.init({
  dsn: __YOUR_DSN__,
  debug: true,
  integrations: [Sentry.wasmIntegration()],
});

// Non-streaming load (broken)
fetch("crash.wasm")
  .then(function (r) { return r.arrayBuffer(); })
  .then(function (buf) { return WebAssembly.instantiate(buf); })
  .then(function (result) {
    result.instance.exports.divide(1, 0); // triggers RuntimeError
  });

Steps to Reproduce

  1. Build the repro: npm run build (compiles C to WASM with build_id via Emscripten)
  2. Upload symbols: npm run upload:symbols (uploads WASM debug files + JS source maps)
  3. Serve: npm run dev
  4. Open /index.html (non-streaming load) and click "Divide by zero"
  5. Compare with /streaming.html (streaming load) — same button, same WASM

Expected Result

Both loading methods should produce an event with debug_meta.images containing the WASM module, allowing Sentry to symbolicate the stack frame (resolve to crash.c:5, function divide).

Actual Result

Streaming (/streaming.html) works:

  • debug_meta.images contains the WASM image with correct code_id, debug_file
  • Frame symbolicated to crash.c:5 with addr_mode=rel:0

Non-streaming (/index.html) is BROKEN:

  • debug_meta is completely absent from the event
  • WASM frame has platform=native and instruction_addr but no addr_mode
  • No symbolication occurs despite symbols being uploaded

Additional Context

We are adding support for Web platform in Sentry for Godot Engine. This bug was discovered during development.

The SDK only patches WebAssembly.instantiateStreaming() and WebAssembly.compileStreaming(). Non-streaming APIs (instantiate(buffer), compile(), new Module()) are never intercepted, so modules loaded through them are never registered in the image registry.

This affects any runtime using non-streaming loading, including Emscripten's dynamic library loader (used by Godot Engine, GDExtensions, side modules, etc).

Priority

React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it.

Activity

  1. moved this to Waiting for: Product Owner in GitHub Issues with 👀 3on Feb 27, 2026
  2. linear commented on Feb 27, 2026

    @linear
  3. self-assigned this
    on Feb 27, 2026
  4. andreiborza commented on Feb 27, 2026

    @andreiborza
    Member

    Thanks Serhii, I'll take a look on Monday. Thanks again for the repro!

  5. moved this from Waiting for: Product Owner to No status in GitHub Issues with 👀 3on Feb 27, 2026
  6. harshit078 commented on Mar 9, 2026

    @harshit078
    Contributor

    @andreiborza , If not being worked internally. Mind if I take this up ?

  7. moved this to Waiting for: Product Owner in GitHub Issues with 👀 3on Mar 9, 2026
  8. andreiborza commented on Mar 10, 2026

    @andreiborza
    Member

    @harshit078, I had a quick look over it but didn't really start on it yet. One key question is how we actually map these back to URLs...

    Feel free to take a stab at it! 🙏

  9. moved this from Waiting for: Product Owner to No status in GitHub Issues with 👀 3on Mar 10, 2026
  10. removed their assignment
    on Apr 10, 2026
  11. mydea commented on Oct 23, 2026

    @mydea
    Member

    Fixed by #23767 (patching non-streaming WebAssembly.instantiate/WebAssembly.compile load paths) with a follow-up in #23999. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions