summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2014-11-24 14:04:06 -0500
committerMark Benvenuto <mark.benvenuto@mongodb.com>2014-11-26 10:45:48 -0500
commit4df4b1066735e3806fa2efb4ff6d6c6b277ab6b1 (patch)
treea3b26e017736c4b71a4e6ab69dab6b18fb5aaa8c /src/mongo
parent1ca93ea38fe42f885c5c198d9f46335ff1294136 (diff)
downloadmongo-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.cpp2
-rw-r--r--src/mongo/db/concurrency/lock_state.cpp2
-rw-r--r--src/mongo/db/namespace_string.h11
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