diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-11-24 14:04:06 -0500 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-11-26 10:45:48 -0500 |
commit | 4df4b1066735e3806fa2efb4ff6d6c6b277ab6b1 (patch) | |
tree | a3b26e017736c4b71a4e6ab69dab6b18fb5aaa8c /src/mongo | |
parent | 1ca93ea38fe42f885c5c198d9f46335ff1294136 (diff) | |
download | mongo-4df4b1066735e3806fa2efb4ff6d6c6b277ab6b1.tar.gz |
SERVER-16055: Commands with empty string cause the server to terminate
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/concurrency/d_concurrency.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/concurrency/lock_state.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/namespace_string.h | 11 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/mongo/db/concurrency/d_concurrency.cpp b/src/mongo/db/concurrency/d_concurrency.cpp index 9ae465747ae..5c4f05ada21 100644 --- a/src/mongo/db/concurrency/d_concurrency.cpp +++ b/src/mongo/db/concurrency/d_concurrency.cpp @@ -197,7 +197,7 @@ namespace mongo { : ScopedLock(lockState, mode == MODE_S || mode == MODE_IS ? 'r' : 'w'), _id(RESOURCE_DATABASE, db), _mode(mode) { - massert(28539, "need a valid database name", !db.empty() && !nsIsFull(db)); + massert(28539, "need a valid database name", !db.empty() && nsIsDbOnly(db)); lockDB(); } diff --git a/src/mongo/db/concurrency/lock_state.cpp b/src/mongo/db/concurrency/lock_state.cpp index 450f20e84ef..bf63fec64df 100644 --- a/src/mongo/db/concurrency/lock_state.cpp +++ b/src/mongo/db/concurrency/lock_state.cpp @@ -485,7 +485,7 @@ namespace { template<bool IsForMMAPV1> bool LockerImpl<IsForMMAPV1>::isDbLockedForMode(const StringData& dbName, LockMode mode) const { - invariant(!nsIsFull(dbName)); + invariant(nsIsDbOnly(dbName)); if (isW()) return true; if (isR() && isSharedMode(mode)) return true; diff --git a/src/mongo/db/namespace_string.h b/src/mongo/db/namespace_string.h index 94d63e8c375..2d4ef9f32e7 100644 --- a/src/mongo/db/namespace_string.h +++ b/src/mongo/db/namespace_string.h @@ -236,6 +236,17 @@ namespace mongo { return true; } + /** + * foo = true + * foo. = false + * foo.a = false + */ + inline bool nsIsDbOnly(const StringData& ns) { + size_t i = ns.find('.'); + if (i == std::string::npos) + return true; + return false; + } /** * NamespaceDBHash and NamespaceDBEquals allow you to do something like |