Skip to content

Commit 314a463

Browse files
committed
[JAVA-151]: Dot allowed in key names
1 parent de72e9c commit 314a463

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

src/main/com/mongodb/DBApiLayer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,13 @@ Iterator<DBObject> __find( DBObject ref , DBObject fields , int numToSkip , int
287287
public WriteResult update( DBObject query , DBObject o , boolean upsert , boolean multi , com.mongodb.WriteConcern concern )
288288
throws MongoException {
289289

290+
if (o != null && !o.keySet().isEmpty()) {
291+
// if 1st key doesnt start with $, then object will be inserted as is, need to check it
292+
String key = o.keySet().iterator().next();
293+
if (key.charAt(0) != '$')
294+
_checkObject(o, false, false);
295+
}
296+
290297
if ( willTrace() ) trace( "update: " + _fullNameSpace + " " + JSON.serialize( query ) );
291298

292299
OutMessage om = new OutMessage( _mongo , 2001 );

src/main/com/mongodb/DBCollection.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,13 @@ public DBObject findAndModify(DBObject query, DBObject fields, DBObject sort, bo
310310
if (remove)
311311
cmd.append( "remove", remove );
312312
else {
313-
if (update != null && !update.keySet().isEmpty())
313+
if (update != null && !update.keySet().isEmpty()) {
314+
// if 1st key doesnt start with $, then object will be inserted as is, need to check it
315+
String key = update.keySet().iterator().next();
316+
if (key.charAt(0) != '$')
317+
_checkObject(update, false, false);
314318
cmd.append( "update", update );
319+
}
315320
if (returnNew)
316321
cmd.append( "new", returnNew );
317322
if (upsert)

src/test/com/mongodb/JavaClientTest.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,38 @@ public void testGetCollectionFromString(){
705705
assertEquals( "foo.bar.zoo.dork" , c.getName() );
706706

707707
}
708-
708+
709+
@Test
710+
public void testBadKey(){
711+
DBCollection c = _db.getCollectionFromString( "foo" );
712+
assertEquals( "foo" , c.getName() );
713+
714+
try {
715+
c.insert(new BasicDBObject("a.b", 1));
716+
assertTrue(false, "Bad key was accepted");
717+
} catch (Exception e) {}
718+
try {
719+
c.insert(new BasicDBObject("$a", 1));
720+
assertTrue(false, "Bad key was accepted");
721+
} catch (Exception e) {}
722+
723+
try {
724+
c.save(new BasicDBObject("a.b", 1));
725+
assertTrue(false, "Bad key was accepted");
726+
} catch (Exception e) {}
727+
try {
728+
c.save(new BasicDBObject("$a", 1));
729+
assertTrue(false, "Bad key was accepted");
730+
} catch (Exception e) {}
731+
732+
c.insert(new BasicDBObject("a", 1));
733+
try {
734+
c.update(new BasicDBObject("a", 1), new BasicDBObject("a.b", 1));
735+
assertTrue(false, "Bad key was accepted");
736+
} catch (Exception e) {}
737+
c.update(new BasicDBObject("a", 1), new BasicDBObject("$set", new BasicDBObject("a.b", 1)));
738+
}
739+
709740
final Mongo _mongo;
710741
final DB _db;
711742

0 commit comments

Comments
 (0)