0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-12-01 09:32:32 +01:00

don't allow empty collection names SERVER-2314

This commit is contained in:
Eliot Horowitz 2010-12-30 23:59:01 -05:00
parent 9d8e3967a9
commit d60aa255e3
3 changed files with 26 additions and 3 deletions

View File

@ -186,7 +186,7 @@ namespace mongo {
return false;
}
log(1) << "create collection " << ns << ' ' << options << '\n';
log(1) << "create collection " << ns << ' ' << options << endl;
/* todo: do this only when we have allocated space successfully? or we could insert with a { ok: 0 } field
and then go back and set to ok : 1 after we are done.
@ -1444,7 +1444,7 @@ namespace mongo {
DiskLoc DataFileMgr::insert(const char *ns, const void *obuf, int len, bool god, const BSONElement &writeId, bool mayAddIndex) {
bool wouldAddIndex = false;
massert( 10093 , "cannot insert into reserved $ collection", god || isANormalNSName( ns ) );
uassert( 10094 , "invalid ns", strchr( ns , '.' ) > 0 );
uassert( 10094 , str::stream() << "invalid ns: " << ns , isValidNS( ns ) );
const char *sys = strstr(ns, "system.");
if ( sys ) {
uassert( 10095 , "attempt to insert in reserved database name 'system'", sys != ns);
@ -1961,7 +1961,7 @@ namespace mongo {
BOOST_CHECK_EXCEPTION( ok = fo.apply(q) );
if ( ok ) {
if ( extra != 10 ){
log(1) << fo.op() << " file " << q.string() << '\n';
log(1) << fo.op() << " file " << q.string() << endl;
log() << " _applyOpToDataFiles() warning: extra == " << extra << endl;
}
}
@ -2014,5 +2014,16 @@ namespace mongo {
return true;
}
bool isValidNS( const StringData& ns ){
// TODO: should check for invalid characters
const char * x = strchr( ns.data() , '.' );
if ( ! x )
return false;
x++;
return *x > 0;
}
} // namespace mongo

View File

@ -55,6 +55,8 @@ namespace mongo {
// -1 if library unavailable.
boost::intmax_t freeSpace( const string &path = dbpath );
bool isValidNS( const StringData& ns );
/*---------------------------------------------------------------------*/
class MongoDataFile {

View File

@ -425,6 +425,14 @@ namespace BasicTests {
}
};
class NSValidNames {
public:
void run(){
ASSERT( isValidNS( "test.foo" ) );
ASSERT( ! isValidNS( "test." ) );
ASSERT( ! isValidNS( "test" ) );
}
};
class PtrTests {
public:
@ -592,6 +600,8 @@ namespace BasicTests {
add< DatabaseValidNames >();
add< DatabaseOwnsNS >();
add< NSValidNames >();
add< PtrTests >();
add< StringSplitterTest >();