From 5d9bc9e53d6c0dbee5a1efee4ac7911c8b61ac87 Mon Sep 17 00:00:00 2001 From: win7-7 Date: Tue, 30 Dec 2025 03:36:19 +0200 Subject: [PATCH] 1330339 - Assertion failure: !done() && debugEnabled(), at js/src/wasm/WasmFrameIterator.cpp:223 1330339 - Ensure wasm debug is enabled when observesFrame is queried. --- js/src/vm/Debugger.cpp | 6 +++++- js/src/vm/Stack.h | 12 +++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp index e6de5ef1b5..344ee3a4d1 100644 --- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -6286,8 +6286,12 @@ Debugger::observesFrame(const FrameIter& iter) const if (thisVal.isMagic() && thisVal.whyMagic() == JS_IS_CONSTRUCTING) return false; } - if (iter.isWasm()) + if (iter.isWasm()) { + // Skip frame of wasm instances we cannot observe. + if (!iter.wasmDebugEnabled()) + return false; return observesWasm(iter.wasmInstance()); + } return observesScript(iter.script()); } diff --git a/js/src/vm/Stack.h b/js/src/vm/Stack.h index 466e9400ba..42faa1158a 100644 --- a/js/src/vm/Stack.h +++ b/js/src/vm/Stack.h @@ -1835,6 +1835,8 @@ class FrameIter // ----------------------------------------------------------- // The following functions can only be called when isWasm() // ----------------------------------------------------------- + + inline bool wasmDebugEnabled() const; inline wasm::Instance* wasmInstance() const; // ----------------------------------------------------------- @@ -2083,11 +2085,19 @@ FrameIter::script() const return data_.jitFrames_.script(); } +inline bool +FrameIter::wasmDebugEnabled() const +{ + MOZ_ASSERT(!done()); + MOZ_ASSERT(data_.state_ == WASM); + return data_.wasmFrames_.debugEnabled(); +} + inline wasm::Instance* FrameIter::wasmInstance() const { MOZ_ASSERT(!done()); - MOZ_ASSERT(data_.state_ == WASM); + MOZ_ASSERT(data_.state_ == WASM && wasmDebugEnabled()); return data_.wasmFrames_.instance(); }