From 95d4d41ee63d34bf57175528adfa384f0cceff26 Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Thu, 10 Jul 2008 02:17:13 +0000
Subject: [PATCH] ITS#5578

---
 CHANGES              |  1 +
 servers/slapd/attr.c | 11 +++++------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/CHANGES b/CHANGES
index 917a2d4852..e4ba6f9f63 100644
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,7 @@ OpenLDAP 2.4.11 Engineering
 	Fixed slapd crash with no listeners (ITS#5563)
 	Fixed slapd equality rules for olcRootDN/olcSchemaDN (ITS#5540)
 	Fixed slapd sets memory leak (ITS#5557)
+	Fixed slapd sortvals binary search (ITS#5578)
 	Fixed slapd/slapo-syncprov syncrepl contextCSN updates as internal ops (ITS#5596)
 	Fixed slapd-meta link to slapd-ldap (ITS#5355)
 	Fixed slapd-sock, back-shell buffer count (ITS#5558)
diff --git a/servers/slapd/attr.c b/servers/slapd/attr.c
index e54ed671be..8204fa7be8 100644
--- a/servers/slapd/attr.c
+++ b/servers/slapd/attr.c
@@ -324,17 +324,16 @@ attr_valfind(
 		while ( 0 < n ) {
 			unsigned pivot = n >> 1;
 			i = base + pivot;
-			if ( i >= a->a_numvals ) {
-				i = a->a_numvals - 1;
-				break;
-			}
 			rc = value_match( &match, a->a_desc, mr, flags,
 				&a->a_nvals[i], cval, &text );
 			if ( rc == LDAP_SUCCESS && match == 0 )
 				break;
-			n = pivot;
-			if ( match < 0 )
+			if ( match < 0 ) {
 				base = i+1;
+				n -= pivot+1;
+			} else {
+				n = pivot;
+			}
 		}
 		if ( match < 0 )
 			i++;
-- 
GitLab