diff options
author | David Storch <david.storch@10gen.com> | 2015-09-21 17:50:08 -0400 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2015-09-21 17:57:19 -0400 |
commit | 2375d33db102c62e7a35af754a7c90cc623f0815 (patch) | |
tree | 6e8073ca325d1fbc6269d2273299fa026560a580 /src | |
parent | 4f0808152055a7be0d1247cf4ef0cc8d863fcb2a (diff) | |
download | mongo-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.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/query/query_planner_test.cpp | 5 |
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 // |