From 65d5b29cd962bfeaab347981a3f12dd1b3e8dd3f Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Wed, 15 Feb 2012 21:50:19 +0000
Subject: [PATCH] Fix issue OPENDJ-423: Single AND component filter causes an uncatch exception in ECL (ECLSearchOperation.java:1467). Check that an AND filter has components before processing them. Also includes minor cleanup.
---
opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java | 40 +++++++++++++++++++++++++++++-----------
1 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index b6aea06..28210f9 100644
--- a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -23,7 +23,7 @@
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
- * Portions Copyright 2010-2011 ForgeRock AS
+ * Portions Copyright 2010-2012 ForgeRock AS
*/
package org.opends.server.workflowelement.externalchangelog;
@@ -343,8 +343,15 @@
persistentSearch.cancel();
setSendResponse(true);
}
- this.abort(null);
- throw coe;
+ if (eclSession != null)
+ {
+ try
+ {
+ eclSession.close();
+ }
+ catch(Exception ignored){}
+ }
+ throw coe;
}
catch (Exception e)
{
@@ -1004,7 +1011,7 @@
{
AttributeType aType;
- String dnString = "";
+ String dnString;
if (draftChangenumber == 0)
{
// Draft uncompat mode
@@ -1420,11 +1427,24 @@
// Here is the only binary operation we know how to optimize
Collection<SearchFilter> comps = sf.getFilterComponents();
SearchFilter sfs[] = comps.toArray(new SearchFilter[0]);
- StartECLSessionMsg m1 = evaluateSearchParameters2(sfs[0]);
- StartECLSessionMsg m2 = evaluateSearchParameters2(sfs[1]);
-
- int l1 = m1.getLastDraftChangeNumber();
- int l2 = m2.getLastDraftChangeNumber();
+ int l1 = -1;
+ int f1 = -1;
+ int l2 = -1;
+ int f2 = -1;
+ StartECLSessionMsg m1;
+ StartECLSessionMsg m2;
+ if (sfs.length > 0)
+ {
+ m1 = evaluateSearchParameters2(sfs[0]);
+ l1 = m1.getLastDraftChangeNumber();
+ f1 = m1.getFirstDraftChangeNumber();
+ }
+ if (sfs.length > 1)
+ {
+ m2 = evaluateSearchParameters2(sfs[1]);
+ l2 = m2.getLastDraftChangeNumber();
+ f2 = m2.getFirstDraftChangeNumber();
+ }
if (l1 == -1)
startCLmsg.setLastDraftChangeNumber(l2);
else
@@ -1433,8 +1453,6 @@
else
startCLmsg.setLastDraftChangeNumber(Math.min(l1,l2));
- int f1 = m1.getFirstDraftChangeNumber();
- int f2 = m2.getFirstDraftChangeNumber();
startCLmsg.setFirstDraftChangeNumber(Math.max(f1,f2));
return startCLmsg;
}
--
Gitblit v1.10.0