diff options
author | Jason Carey <jcarey@argv.me> | 2017-12-05 12:47:57 -0500 |
---|---|---|
committer | Jason Carey <jcarey@argv.me> | 2018-02-01 10:52:11 -0500 |
commit | edebe4d632290b991c291d5e0e0d8bb7e3f0428b (patch) | |
tree | b8998f662781535c8ba96702d97c6786b06f4417 /src/mongo/scripting/mozjs/objectwrapper.cpp | |
parent | b1a3d36f48369fb0dacd5e8dde7439f586e2f6f9 (diff) | |
download | mongo-edebe4d632290b991c291d5e0e0d8bb7e3f0428b.tar.gz |
SERVER-32072 Always roundtrip dbrefs in the shell
dbrefs in the shell can see silent casts from int -> float due to a lack
of special case logic that regular bson objects receive.
For a fix, hook up the special lookup routines in js bsoninfo type into
the js dbrefinfo types.
Diffstat (limited to 'src/mongo/scripting/mozjs/objectwrapper.cpp')
-rw-r--r-- | src/mongo/scripting/mozjs/objectwrapper.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/mongo/scripting/mozjs/objectwrapper.cpp b/src/mongo/scripting/mozjs/objectwrapper.cpp index 0480cc65561..e34719a525f 100644 --- a/src/mongo/scripting/mozjs/objectwrapper.cpp +++ b/src/mongo/scripting/mozjs/objectwrapper.cpp @@ -455,7 +455,8 @@ void ObjectWrapper::callMethod(JS::HandleValue fun, JS::MutableHandleValue out) } BSONObj ObjectWrapper::toBSON() { - if (getScope(_context)->getProto<BSONInfo>().instanceOf(_object)) { + if (getScope(_context)->getProto<BSONInfo>().instanceOf(_object) || + getScope(_context)->getProto<DBRefInfo>().instanceOf(_object)) { BSONObj* originalBSON = nullptr; bool altered; @@ -591,7 +592,8 @@ ObjectWrapper::WriteFieldRecursionFrame::WriteFieldRecursionFrame(JSContext* cx, } } - if (getScope(cx)->getProto<BSONInfo>().instanceOf(thisv)) { + if (getScope(cx)->getProto<BSONInfo>().instanceOf(thisv) || + getScope(cx)->getProto<DBRefInfo>().instanceOf(thisv)) { std::tie(originalBSON, altered) = BSONInfo::originalBSON(cx, thisv); } } |