mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Ludovic Poitou
15.50.2012 65d5b29cd962bfeaab347981a3f12dd1b3e8dd3f
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.
1 files modified
40 ■■■■ changed files
opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java 40 ●●●● patch | view | raw | blame | history
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;
    }