diff options
author | Jason Carey <jcarey@argv.me> | 2015-12-01 15:07:26 -0500 |
---|---|---|
committer | Jason Carey <jcarey@argv.me> | 2015-12-02 11:48:08 -0500 |
commit | f397859e7e76882aee534350fa04e6c621c6ec53 (patch) | |
tree | dfd1e86d1b6b9037d58778e69ba53724ae7c9781 /src/mongo/scripting | |
parent | dd08d650c2734a86d7bebb54aa84cc38560b1f2a (diff) | |
download | mongo-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.
Diffstat (limited to 'src/mongo/scripting')
-rw-r--r-- | src/mongo/scripting/mozjs/exception.cpp | 5 |
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) |