summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Storch <david.storch@10gen.com>2015-09-21 17:50:08 -0400
committerDavid Storch <david.storch@10gen.com>2015-09-21 17:57:19 -0400
commit2375d33db102c62e7a35af754a7c90cc623f0815 (patch)
tree6e8073ca325d1fbc6269d2273299fa026560a580 /src
parent4f0808152055a7be0d1247cf4ef0cc8d863fcb2a (diff)
downloadmongo-2375d33db102c62e7a35af754a7c90cc623f0815.tar.gz
SERVER-19725 Fix nullptr crash in QueryPlanner::plan with $near operator
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/query/query_planner.cpp2
-rw-r--r--src/mongo/db/query/query_planner_test.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/mongo/db/query/query_planner.cpp b/src/mongo/db/query/query_planner.cpp
index 2ebd0b51834..11b6c86c925 100644
--- a/src/mongo/db/query/query_planner.cpp
+++ b/src/mongo/db/query/query_planner.cpp
@@ -697,7 +697,7 @@ namespace mongo {
if (QueryPlannerCommon::hasNode(query.root(), MatchExpression::GEO_NEAR, &gnNode)) {
// No index for GEO_NEAR? No query.
RelevantTag* tag = static_cast<RelevantTag*>(gnNode->getTag());
- if (0 == tag->first.size() && 0 == tag->notFirst.size()) {
+ if (!tag || (0 == tag->first.size() && 0 == tag->notFirst.size())) {
QLOG() << "Unable to find index for $geoNear query." << endl;
// Don't leave tags on query tree.
query.root()->resetTag();
diff --git a/src/mongo/db/query/query_planner_test.cpp b/src/mongo/db/query/query_planner_test.cpp
index b4bdac93a50..8134336e810 100644
--- a/src/mongo/db/query/query_planner_test.cpp
+++ b/src/mongo/db/query/query_planner_test.cpp
@@ -2180,6 +2180,11 @@ namespace {
assertSolutionExists("{geoNear2d: {a: '2d', b: 1}}");
}
+ TEST_F(QueryPlannerTest, NearEmptyPath) {
+ addIndex(BSON("" << "2dsphere"));
+ runInvalidQuery(fromjson("{'': {$near: {$geometry: {type:'Point',coordinates:[0,0]}}}}"));
+ }
+
//
// $in
//