From 42ba26a163635f76a5f43af52233ca5dc103d9d1 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 17 Nov 2015 20:29:15 +0000
Subject: [PATCH] OPENDJ-2395: fix NPE during undefined indexed search

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java |   44 +++++++++++++++++++++++++++++++-------------
 1 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
index b8e2872..740a4ca 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
@@ -672,41 +672,59 @@
       IndexFilterType indexFilterType, SearchFilter filter) throws DecodeException
   {
     MatchingRule rule;
-    Assertion assertion;
     switch (indexFilterType)
     {
     case EQUALITY:
       rule = filter.getAttributeType().getEqualityMatchingRule();
-      assertion = rule.getAssertion(filter.getAssertionValue());
-      return assertion.createIndexQuery(indexQueryFactory);
+      if (rule != null) {
+        Assertion assertion = rule.getAssertion(filter.getAssertionValue());
+        return assertion.createIndexQuery(indexQueryFactory);
+      }
+      break;
 
     case PRESENCE:
       return indexQueryFactory.createMatchAllQuery();
 
     case GREATER_OR_EQUAL:
       rule = filter.getAttributeType().getOrderingMatchingRule();
-      assertion = rule.getGreaterOrEqualAssertion(filter.getAssertionValue());
-      return assertion.createIndexQuery(indexQueryFactory);
+      if (rule != null) {
+        Assertion assertion = rule.getGreaterOrEqualAssertion(filter.getAssertionValue());
+        return assertion.createIndexQuery(indexQueryFactory);
+      }
+      break;
 
     case LESS_OR_EQUAL:
       rule = filter.getAttributeType().getOrderingMatchingRule();
-      assertion = rule.getLessOrEqualAssertion(filter.getAssertionValue());
-      return assertion.createIndexQuery(indexQueryFactory);
+      if (rule != null) {
+        Assertion assertion = rule.getLessOrEqualAssertion(filter.getAssertionValue());
+        return assertion.createIndexQuery(indexQueryFactory);
+      }
+      break;
 
     case SUBSTRING:
       rule = filter.getAttributeType().getSubstringMatchingRule();
-      assertion = rule.getSubstringAssertion(
-          filter.getSubInitialElement(), filter.getSubAnyElements(), filter.getSubFinalElement());
-      return assertion.createIndexQuery(indexQueryFactory);
+      if (rule != null) {
+        Assertion assertion = rule.getSubstringAssertion(filter.getSubInitialElement(),
+                                                         filter.getSubAnyElements(),
+                                                         filter.getSubFinalElement());
+        return assertion.createIndexQuery(indexQueryFactory);
+      }
+      break;
 
     case APPROXIMATE:
       rule = filter.getAttributeType().getApproximateMatchingRule();
-      assertion = rule.getAssertion(filter.getAssertionValue());
-      return assertion.createIndexQuery(indexQueryFactory);
+      if (rule != null) {
+        Assertion assertion = rule.getAssertion(filter.getAssertionValue());
+        return assertion.createIndexQuery(indexQueryFactory);
+      }
+      break;
 
     default:
-      return null;
+      break;
     }
+
+    // The filter is undefined.
+    return indexQueryFactory.createMatchAllQuery();
   }
 
   /**

--
Gitblit v1.10.0