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 10:50:09 -0500
commit5285225e71c5c0652520ef99d0ae4ca24655f72f (patch)
tree7b2edae0cd9761892be6978522a6287b443813d2
parent762c8371fabd192bdb98717c4588858eab78d12c (diff)
downloadmongo-5285225e71c5c0652520ef99d0ae4ca24655f72f.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 cd11f4bb77a..5e0a0341909 100644
--- a/src/mongo/bson/bson_validate.cpp
+++ b/src/mongo/bson/bson_validate.cpp
@@ -90,6 +90,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 c31ad0140df..6dce13d0ff6 100644
--- a/src/mongo/bson/bson_validate_test.cpp
+++ b/src/mongo/bson/bson_validate_test.cpp
@@ -292,4 +292,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()));
+ }
+
}