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