summaryrefslogtreecommitdiff
path: root/src/mongo/bson/bson_obj_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/bson/bson_obj_test.cpp')
-rw-r--r--src/mongo/bson/bson_obj_test.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/mongo/bson/bson_obj_test.cpp b/src/mongo/bson/bson_obj_test.cpp
index f9581d03c80..049fab19d52 100644
--- a/src/mongo/bson/bson_obj_test.cpp
+++ b/src/mongo/bson/bson_obj_test.cpp
@@ -764,4 +764,43 @@ TEST(BSONObj, sizeChecks) {
ErrorCodes::BSONObjectTooLarge);
}
+TEST(BSONObj, nullByteInStringBasic) {
+ const size_t size = 3;
+ StringData str("b\0c", size);
+
+ // { "a": "b\0c" }
+ BSONObjBuilder b;
+ b.append("a"_sd, str);
+ BSONObj obj{b.obj()};
+
+ ASSERT_EQ(str.size(), obj.getStringField("a").size());
+ ASSERT_EQ(str, obj.getStringField("a"));
+}
+
+TEST(BSONObj, nullByteInStringMulti) {
+ const size_t size = 5;
+ StringData str("b\0c\0d", size);
+
+ // { "a": "b\0c\0d" }
+ BSONObjBuilder b;
+ b.append("a"_sd, str);
+ BSONObj obj{b.obj()};
+
+ ASSERT_EQ(str.size(), obj.getStringField("a").size());
+ ASSERT_EQ(str, obj.getStringField("a"));
+}
+
+TEST(BSONObj, nullByteInStringFull) {
+ const size_t size = 9;
+ StringData str("\0\0\0\0\0\0\0\0\0", size);
+
+ // { "a": "\0\0\0\0\0\0\0\0\0" }
+ BSONObjBuilder b;
+ b.append("a"_sd, str);
+ BSONObj obj{b.obj()};
+
+ ASSERT_EQ(str.size(), obj.getStringField("a").size());
+ ASSERT_EQ(str, obj.getStringField("a"));
+}
+
} // unnamed namespace