summaryrefslogtreecommitdiff
path: root/src/mongo/scripting/mozjs/objectwrapper.cpp
diff options
context:
space:
mode:
authorJason Carey <jcarey@argv.me>2017-12-05 12:47:57 -0500
committerJason Carey <jcarey@argv.me>2018-02-01 10:52:11 -0500
commitedebe4d632290b991c291d5e0e0d8bb7e3f0428b (patch)
treeb8998f662781535c8ba96702d97c6786b06f4417 /src/mongo/scripting/mozjs/objectwrapper.cpp
parentb1a3d36f48369fb0dacd5e8dde7439f586e2f6f9 (diff)
downloadmongo-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.cpp6
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);
}
}