diff options
author | Eliot Horowitz <eliot@10gen.com> | 2015-02-11 22:12:37 -0500 |
---|---|---|
committer | Ramon Fernandez <ramon.fernandez@mongodb.com> | 2015-02-12 10:50:09 -0500 |
commit | 5285225e71c5c0652520ef99d0ae4ca24655f72f (patch) | |
tree | 7b2edae0cd9761892be6978522a6287b443813d2 | |
parent | 762c8371fabd192bdb98717c4588858eab78d12c (diff) | |
download | mongo-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.cpp | 5 | ||||
-rw-r--r-- | src/mongo/bson/bson_validate_test.cpp | 16 |
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())); + } + } |