summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Carey <jcarey@argv.me>2015-12-01 15:07:26 -0500
committerJason Carey <jcarey@argv.me>2015-12-02 11:48:08 -0500
commitf397859e7e76882aee534350fa04e6c621c6ec53 (patch)
treedfd1e86d1b6b9037d58778e69ba53724ae7c9781
parentdd08d650c2734a86d7bebb54aa84cc38560b1f2a (diff)
downloadmongo-f397859e7e76882aee534350fa04e6c621c6ec53.tar.gz
SERVER-21711 make currentJSExceptionToStatus more robust
JS_GetPendingException can return non-objects. In that case, just return whatever stringification we can dig up.
-rw-r--r--src/mongo/scripting/mozjs/exception.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/mongo/scripting/mozjs/exception.cpp b/src/mongo/scripting/mozjs/exception.cpp
index 28ab1545dac..5b813087ad2 100644
--- a/src/mongo/scripting/mozjs/exception.cpp
+++ b/src/mongo/scripting/mozjs/exception.cpp
@@ -36,6 +36,7 @@
#include "mongo/scripting/mozjs/implscope.h"
#include "mongo/scripting/mozjs/jsstringwrapper.h"
#include "mongo/scripting/mozjs/objectwrapper.h"
+#include "mongo/scripting/mozjs/valuewriter.h"
#include "mongo/util/assert_util.h"
namespace mongo {
@@ -89,6 +90,10 @@ Status currentJSExceptionToStatus(JSContext* cx, ErrorCodes::Error altCode, Stri
if (!JS_GetPendingException(cx, &vp))
return Status(altCode, altReason.rawData());
+ if (!vp.isObject()) {
+ return Status(altCode, ValueWriter(cx, vp).toString());
+ }
+
JS::RootedObject obj(cx, vp.toObjectOrNull());
JSErrorReport* report = JS_ErrorFromException(cx, obj);
if (!report)