summaryrefslogtreecommitdiff
path: root/js/src/jsexn.cpp
diff options
context:
space:
mode:
authorMartok <martok@martoks-place.de>2023-01-21 02:13:01 +0100
committerMartok <martok@martoks-place.de>2023-01-22 00:11:27 +0100
commitb1440d285b75a661e98c3ddf93a737211ed90b59 (patch)
tree889ec566a8b99576fa57c9bb0eba0a19f1e0c269 /js/src/jsexn.cpp
parentd78912ec17683c1c5a3d30b89c2c03f469f92a1a (diff)
downloaduxp-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.cpp15
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;