diff options
author | Adam Midvidy <amidvidy@gmail.com> | 2014-09-19 16:43:33 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2014-09-19 16:50:23 -0400 |
commit | 78c5f9dd5ac65eae251df3e87175a0af076d90d9 (patch) | |
tree | e305dcd559f6b8f8a1ed987e6938e5b8406fea19 /src/mongo/db/pipeline | |
parent | 63dd64abac9002e71348b7550234131cd01a87f5 (diff) | |
download | mongo-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.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/pipeline/value_internal.h | 3 |
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) { |