From fb249f25fe98af8c2dcbf498872fd48c2c3ed854 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 10 Jun 2015 22:03:01 +0000
Subject: [PATCH] OPENDJ-2090 - fix bounds checking for DN2ID children and subtree cursors.

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2ID.java |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2ID.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2ID.java
index 6899251..777513a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2ID.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2ID.java
@@ -206,14 +206,14 @@
    */
   private static final class ChildrenCursor extends SequentialCursorForwarding {
     private final ByteStringBuilder builder;
-    private final ByteString parentDN;
+    private final ByteString limit;
     private boolean cursorOnParent;
 
     ChildrenCursor(Cursor<ByteString, ByteString> delegate)
     {
       super(delegate);
       builder = new ByteStringBuilder(128);
-      parentDN = delegate.isDefined() ? delegate.getKey() : null;
+      limit = delegate.isDefined() ? afterKey(delegate.getKey()).toByteString() : null;
       cursorOnParent = true;
     }
 
@@ -228,7 +228,7 @@
         // Go to the next sibling
         delegate.positionToKeyOrNext(nextSibling());
       }
-      return isDefined() && delegate.getKey().startsWith(parentDN);
+      return isDefined() && delegate.getKey().compareTo(limit) < 0;
     }
 
     private ByteStringBuilder nextSibling()
@@ -242,18 +242,18 @@
    * at creation.
    */
   private static final class SubtreeCursor extends SequentialCursorForwarding {
-    private final ByteString baseDN;
+    private final ByteString limit;
 
     SubtreeCursor(Cursor<ByteString, ByteString> delegate)
     {
       super(delegate);
-      baseDN = delegate.isDefined() ? delegate.getKey() : null;
+      limit = delegate.isDefined() ? afterKey(delegate.getKey()).toByteString() : null;
     }
 
     @Override
     public boolean next()
     {
-      return delegate.next() && delegate.getKey().startsWith(baseDN);
+      return delegate.next() && delegate.getKey().compareTo(limit) < 0;
     }
   }
 

--
Gitblit v1.10.0