summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2015-02-11 22:12:37 -0500
committerRamon Fernandez <ramon.fernandez@mongodb.com>2015-02-12 13:59:43 -0500
commit8f1c734c7f1862180f607c241fb167640889efba (patch)
tree3d5f6c5f19fbcb7e6befd373cc4c596fe67f10ba
parent4d9728816460fcd7579071c0f64d0c97032a246d (diff)
downloadmongo-8f1c734c7f1862180f607c241fb167640889efba.tar.gz
SERVER-17264: improve bson validation for utf-8 strings
(cherry picked from commit 394a8569ff14a215c0691aa34440227b2e62a4de)
-rw-r--r--src/mongo/bson/bson_validate.cpp5
-rw-r--r--src/mongo/bson/bson_validate_test.cpp16
2 files changed, 21 insertions, 0 deletions
diff --git a/src/mongo/bson/bson_validate.cpp b/src/mongo/bson/bson_validate.cpp
index cbf92cbaff5..0be15d20200 100644
--- a/src/mongo/bson/bson_validate.cpp
+++ b/src/mongo/bson/bson_validate.cpp
@@ -78,6 +78,11 @@ namespace mongo {
if ( !readNumber<int>( &sz ) )
return makeError("invalid bson", _idElem);
+ if ( sz <= 0 ) {
+ // must have NULL at the very least
+ return makeError("invalid bson", _idElem);
+ }
+
if ( out ) {
*out = StringData( _buffer + _position, sz );
}
diff --git a/src/mongo/bson/bson_validate_test.cpp b/src/mongo/bson/bson_validate_test.cpp
index add7432d3da..83f1739dda4 100644
--- a/src/mongo/bson/bson_validate_test.cpp
+++ b/src/mongo/bson/bson_validate_test.cpp
@@ -273,4 +273,20 @@ namespace {
ASSERT_NOT_OK(status);
ASSERT_EQUALS(status.reason(), "not null terminated string in object with unknown _id");
}
+
+ TEST(BSONValidateFast, StringHasSomething) {
+ BufBuilder bb;
+ BSONObjBuilder ob(bb);
+ bb.appendChar(String);
+ bb.appendStr("x", /*withNUL*/true);
+ bb.appendNum(0);
+ const BSONObj x = ob.done();
+ ASSERT_EQUALS(5 // overhead
+ + 1 // type
+ + 2 // name
+ + 4 // size
+ , x.objsize());
+ ASSERT_NOT_OK(validateBSON(x.objdata(), x.objsize()));
+ }
+
}