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 13:59:43 -0500 |
commit | 8f1c734c7f1862180f607c241fb167640889efba (patch) | |
tree | 3d5f6c5f19fbcb7e6befd373cc4c596fe67f10ba | |
parent | 4d9728816460fcd7579071c0f64d0c97032a246d (diff) | |
download | mongo-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.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 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())); + } + } |