diff options
author | Martok <martok@martoks-place.de> | 2023-01-21 02:13:01 +0100 |
---|---|---|
committer | Martok <martok@martoks-place.de> | 2023-01-22 00:11:27 +0100 |
commit | b1440d285b75a661e98c3ddf93a737211ed90b59 (patch) | |
tree | 889ec566a8b99576fa57c9bb0eba0a19f1e0c269 /js/src/jsexn.cpp | |
parent | d78912ec17683c1c5a3d30b89c2c03f469f92a1a (diff) | |
download | uxp-b1440d285b75a661e98c3ddf93a737211ed90b59.tar.gz |
Issue #2089 - Use JS engine stack if necessary when reporting errors
Based-on: m-c 996060
Diffstat (limited to 'js/src/jsexn.cpp')
-rw-r--r-- | js/src/jsexn.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/js/src/jsexn.cpp b/js/src/jsexn.cpp index 7f87c312d3..2eb8e7d105 100644 --- a/js/src/jsexn.cpp +++ b/js/src/jsexn.cpp @@ -361,13 +361,13 @@ struct SuppressErrorsGuard } }; -// Cut off the stack if it gets too deep (most commonly for infinite recursion -// errors). -static const size_t MAX_REPORTED_STACK_DEPTH = 1u << 7; - static bool CaptureStack(JSContext* cx, MutableHandleObject stack) { + // Cut off the stack if it gets too deep (most commonly for infinite recursion + // errors). + static const size_t MAX_REPORTED_STACK_DEPTH = 1u << 7; + return CaptureCurrentStack(cx, stack, JS::StackCapture(JS::MaxFrames(MAX_REPORTED_STACK_DEPTH))); } @@ -699,7 +699,12 @@ js::ErrorToException(JSContext* cx, JSErrorReport* reportp, return; // Throw it. - cx->setPendingException(ObjectValue(*errObject)); + RootedValue errValue(cx, ObjectValue(*errObject)); + RootedSavedFrame nstack(cx); + if (stack) { + nstack = &stack->as<SavedFrame>(); + } + cx->setPendingException(errValue, nstack); // Flag the error report passed in to indicate an exception was raised. reportp->flags |= JSREPORT_EXCEPTION; |