]> git.sur5r.net Git - openldap/commitdiff
import fix to ITS#5136
authorPierangelo Masarati <ando@openldap.org>
Fri, 14 Sep 2007 23:59:53 +0000 (23:59 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 14 Sep 2007 23:59:53 +0000 (23:59 +0000)
CHANGES
servers/slapd/value.c

diff --git a/CHANGES b/CHANGES
index 0a064b657979abf6ea5e4725a62084e5155b8f81..9a068fda52ffc6f1b7453eb62af9fd37d739fec9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,7 @@ OpenLDAP 2.3.39 Engineering
        Fixed slapd password_hash config order (ITS#5082)
        Fixed slapd slap_mods_check bug (ITS#5119)
        Fixed slapd ACL sets memory handling (ITS#4873)
+       Fixed slapd ordered values add normalization issue (ITS#5136)
        Fixed slapd-bdb DB_CONFIG conversion bug (ITS#5118)
        Fixed slapd-ldap SASL idassert w/o autchId
        Fixed slapd-sql concurrency issue (ITS#5095)
index 9e3b5fde67338f97d79518bf652a6a8372f34ba0..edeaff12e812694f9b5181beaffbf46901f3663d 100644 (file)
@@ -697,7 +697,21 @@ ordered_value_add(
        }
 
        new = ch_malloc( (anum+vnum+1) * sizeof(struct berval));
-       if ( a->a_nvals && a->a_nvals != a->a_vals ) {
+
+       /* sanity check: if normalized modifications come in, either
+        * no values are present or normalized existing values differ
+        * from non-normalized; if no normalized modifications come in,
+        * either no values are present or normalized existing values
+        * don't differ from non-normalized */
+       if ( nvals != NULL ) {
+               assert( nvals != vals );
+               assert( a->a_nvals == NULL || a->a_nvals != a->a_vals );
+
+       } else {
+               assert( a->a_nvals == NULL || a->a_nvals == a->a_vals );
+       }
+
+       if ( ( a->a_nvals && a->a_nvals != a->a_vals ) || nvals != NULL ) {
                nnew = ch_malloc( (anum+vnum+1) * sizeof(struct berval));
                /* Shouldn't happen... */
                if ( !nvals ) nvals = vals;