summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2021-06-24 11:33:53 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-12-15 20:53:42 +0000
commit0507c5804f9402625654d054b9d7bd7eadabdb42 (patch)
treeea41cae0edcef11ebff28d70788c575952d7343c
parent02be742d686fa668a8cc1d3d4d7c4f8fa678d521 (diff)
downloadmongo-0507c5804f9402625654d054b9d7bd7eadabdb42.tar.gz
SERVER-57289 redact should not convert BSONArray into BSONObj
(cherry picked from commit 3b8806bef0f65df11e4d49786bf962ce0dd6b4dd)
-rw-r--r--src/mongo/bson/bsonobj.cpp6
-rw-r--r--src/mongo/logv2/redaction_test.cpp15
2 files changed, 15 insertions, 6 deletions
diff --git a/src/mongo/bson/bsonobj.cpp b/src/mongo/bson/bsonobj.cpp
index 285032b2f67..53c7f313289 100644
--- a/src/mongo/bson/bsonobj.cpp
+++ b/src/mongo/bson/bsonobj.cpp
@@ -145,10 +145,14 @@ BSONObj BSONObj::redact() const {
struct redactor {
void operator()(BSONObjBuilder& builder, const BSONObj& obj) {
for (BSONElement e : obj) {
- if (e.type() == Object || e.type() == Array) {
+ if (e.type() == Object) {
BSONObjBuilder subBuilder = builder.subobjStart(e.fieldNameStringData());
operator()(subBuilder, e.Obj());
subBuilder.done();
+ } else if (e.type() == Array) {
+ BSONObjBuilder subBuilder = builder.subarrayStart(e.fieldNameStringData());
+ operator()(subBuilder, e.Obj());
+ subBuilder.done();
} else {
builder.append(e.fieldNameStringData(), "###"_sd);
}
diff --git a/src/mongo/logv2/redaction_test.cpp b/src/mongo/logv2/redaction_test.cpp
index c7db40ab768..e6feb6de33c 100644
--- a/src/mongo/logv2/redaction_test.cpp
+++ b/src/mongo/logv2/redaction_test.cpp
@@ -106,7 +106,6 @@ void testBSONCases(std::initializer_list<BSONStringPair> testCases) {
TEST(RedactBSONTest, BasicBSON) {
logv2::setShouldRedactLogs(true);
- std::vector<BSONStringPair> testCases;
testBSONCases({BSONStringPair(BSONObj(), "{}"),
BSONStringPair(BSON("" << 1), "{ : \"###\" }"),
@@ -122,7 +121,13 @@ TEST(RedactBSONTest, BasicBSON) {
<< "1"),
"{ a: \"###\", a: \"###\" }")});
}
-/*
+
+void testBSONCases(std::vector<BSONStringPair>& testCases) {
+ for (auto m : testCases) {
+ ASSERT_EQ(redact(m.first).toString(), m.second);
+ }
+}
+
TEST(RedactBSONTest, NestedBSON) {
logv2::setShouldRedactLogs(true);
std::vector<BSONStringPair> testCases;
@@ -134,7 +139,7 @@ TEST(RedactBSONTest, NestedBSON) {
testCases.push_back(BSONStringPair(BSON("a" << BSON("a" << 1)), "{ a: { a: \"###\" } }"));
testCases.push_back(BSONStringPair(BSON("a" << BSON("a" << 1 << "b" << 1)),
"{ a: { a: \"###\", b: \"###\" } }"));
- testBSONVector(testCases);
+ testBSONCases(testCases);
}
TEST(RedactBSONTest, BSONWithArrays) {
@@ -147,7 +152,7 @@ TEST(RedactBSONTest, BSONWithArrays) {
testCases.push_back(BSONStringPair(BSON("a" << BSON_ARRAY(BSON("a" << 1) << BSON("b" << 1))),
"{ a: [ { a: \"###\" }, { b: \"###\" } ] }"));
- testBSONVector(testCases);
-}*/
+ testBSONCases(testCases);
+}
} // namespace
} // namespace mongo