summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2014-09-19 16:43:33 -0400
committerBenety Goh <benety@mongodb.com>2014-09-19 16:50:23 -0400
commit78c5f9dd5ac65eae251df3e87175a0af076d90d9 (patch)
treee305dcd559f6b8f8a1ed987e6938e5b8406fea19 /src/mongo/db/pipeline
parent63dd64abac9002e71348b7550234131cd01a87f5 (diff)
downloadmongo-78c5f9dd5ac65eae251df3e87175a0af076d90d9.tar.gz
SERVER-15210 SERVER-15211 remove OID undefined behavior and make it endian aware
Closes #784 Signed-off-by: Benety Goh <benety@mongodb.com>
Diffstat (limited to 'src/mongo/db/pipeline')
-rw-r--r--src/mongo/db/pipeline/value.cpp11
-rw-r--r--src/mongo/db/pipeline/value_internal.h3
2 files changed, 7 insertions, 7 deletions
diff --git a/src/mongo/db/pipeline/value.cpp b/src/mongo/db/pipeline/value.cpp
index a76c9ea4325..06b98118306 100644
--- a/src/mongo/db/pipeline/value.cpp
+++ b/src/mongo/db/pipeline/value.cpp
@@ -34,6 +34,7 @@
#include "mongo/db/jsobj.h"
#include "mongo/db/pipeline/document.h"
+#include "mongo/util/hex.h"
#include "mongo/util/mongoutils/str.h"
namespace mongo {
@@ -166,8 +167,8 @@ namespace mongo {
}
case jstOID:
- BOOST_STATIC_ASSERT(sizeof(_storage.oid) == sizeof(OID));
- memcpy(_storage.oid, elem.OID().getData(), sizeof(OID));
+ BOOST_STATIC_ASSERT(sizeof(_storage.oid) == OID::kOIDSize);
+ memcpy(_storage.oid, elem.OID().view().view(), OID::kOIDSize);
break;
case Bool:
@@ -600,7 +601,7 @@ namespace mongo {
}
case jstOID:
- return memcmp(rL._storage.oid, rR._storage.oid, sizeof(OID));
+ return memcmp(rL._storage.oid, rR._storage.oid, OID::kOIDSize);
case Code:
case Symbol:
@@ -1011,7 +1012,7 @@ namespace mongo {
return Value(ValueStorage(type));
// simple types
- case jstOID: return Value(buf.read<OID>());
+ case jstOID: return Value(OID::from(buf.skip(OID::kOIDSize)));
case NumberInt: return Value(buf.read<int>());
case NumberLong: return Value(buf.read<long long>());
case NumberDouble: return Value(buf.read<double>());
@@ -1046,7 +1047,7 @@ namespace mongo {
Document::SorterDeserializeSettings()));
case DBRef: {
- OID oid = buf.read<OID>();
+ OID oid = OID::from(buf.skip(OID::kOIDSize));
StringData ns = buf.readCStr();
return Value(BSONDBRef(ns, oid));
}
diff --git a/src/mongo/db/pipeline/value_internal.h b/src/mongo/db/pipeline/value_internal.h
index 818c8c8454a..e5f0b080c12 100644
--- a/src/mongo/db/pipeline/value_internal.h
+++ b/src/mongo/db/pipeline/value_internal.h
@@ -91,8 +91,7 @@ namespace mongo {
ValueStorage(BSONType t, const OID& o) {
zero();
type = t;
- memcpy(&oid, &o, sizeof(OID));
- BOOST_STATIC_ASSERT(sizeof(OID) == sizeof(oid));
+ memcpy(&oid, o.view().view(), OID::kOIDSize);
}
ValueStorage(const ValueStorage& rhs) {