]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/value.c
ITS#5469
[openldap] / servers / slapd / value.c
index 9e3b5fde67338f97d79518bf652a6a8372f34ba0..1d1056274fea2c261850395dd15175cf7d7ff0c8 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2008 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -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;