]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema_init.c
ITS#8789 avoid unnecessary writes of context entry
[openldap] / servers / slapd / schema_init.c
index 875422f2961b52fbf92472583f002cc285e6096b..b51ce53e3c0f2ea0bb3bc4ab5c2f21ec25222915 100644 (file)
@@ -721,7 +721,6 @@ int octetStringIndexer(
        void *ctx )
 {
        int i;
-       size_t slen, mlen;
        BerVarray keys;
        HASH_CONTEXT HASHcontext;
        unsigned char HASHdigest[HASH_BYTES];
@@ -738,9 +737,6 @@ int octetStringIndexer(
 
        keys = slap_sl_malloc( sizeof( struct berval ) * (i+1), ctx );
 
-       slen = syntax->ssyn_oidlen;
-       mlen = mr->smr_oidlen;
-
        hashPreset( &HASHcontext, prefix, 0, syntax, mr);
        for( i=0; !BER_BVISNULL( &values[i] ); i++ ) {
                hashIter( &HASHcontext, HASHdigest,
@@ -766,7 +762,6 @@ int octetStringFilter(
        BerVarray *keysp,
        void *ctx )
 {
-       size_t slen, mlen;
        BerVarray keys;
        HASH_CONTEXT HASHcontext;
        unsigned char HASHdigest[HASH_BYTES];
@@ -775,9 +770,6 @@ int octetStringFilter(
        digest.bv_val = (char *)HASHdigest;
        digest.bv_len = HASH_LEN;
 
-       slen = syntax->ssyn_oidlen;
-       mlen = mr->smr_oidlen;
-
        keys = slap_sl_malloc( sizeof( struct berval ) * 2, ctx );
 
        hashPreset( &HASHcontext, prefix, 0, syntax, mr );
@@ -929,7 +921,6 @@ octetStringSubstringsIndexer(
        void *ctx )
 {
        ber_len_t i, nkeys;
-       size_t slen, mlen;
        BerVarray keys;
 
        HASH_CONTEXT HCany, HCini, HCfin;
@@ -975,9 +966,6 @@ octetStringSubstringsIndexer(
 
        keys = slap_sl_malloc( sizeof( struct berval ) * (nkeys+1), ctx );
 
-       slen = syntax->ssyn_oidlen;
-       mlen = mr->smr_oidlen;
-
        if ( flags & SLAP_INDEX_SUBSTR_ANY )
                hashPreset( &HCany, prefix, SLAP_INDEX_SUBSTR_PREFIX, syntax, mr );
        if( flags & SLAP_INDEX_SUBSTR_INITIAL )
@@ -1051,7 +1039,7 @@ octetStringSubstringsFilter (
        SubstringsAssertion *sa;
        char pre;
        ber_len_t nkeys = 0;
-       size_t slen, mlen, klen;
+       size_t klen;
        BerVarray keys;
        HASH_CONTEXT HASHcontext;
        unsigned char HASHdigest[HASH_BYTES];
@@ -1103,9 +1091,6 @@ octetStringSubstringsFilter (
        digest.bv_val = (char *)HASHdigest;
        digest.bv_len = HASH_LEN;
 
-       slen = syntax->ssyn_oidlen;
-       mlen = mr->smr_oidlen;
-
        keys = slap_sl_malloc( sizeof( struct berval ) * (nkeys+1), ctx );
        nkeys = 0;
 
@@ -1816,7 +1801,7 @@ UTF8StringValidate(
        struct berval *in )
 {
        int len;
-       unsigned char *u = (unsigned char *)in->bv_val, *end = in->bv_val + in->bv_len;
+       unsigned char *u = (unsigned char *)in->bv_val, *end = (unsigned char *)in->bv_val + in->bv_len;
 
        if( BER_BVISEMPTY( in ) && syntax == slap_schema.si_syn_directoryString ) {
                /* directory strings cannot be empty */
@@ -2305,7 +2290,7 @@ approxFilter(
        return LDAP_SUCCESS;
 }
 
-/* Remove all spaces and '-' characters */
+/* Remove all spaces and '-' characters, unless the result would be empty */
 static int
 telephoneNumberNormalize(
        slap_mask_t usage,
@@ -2319,8 +2304,11 @@ telephoneNumberNormalize(
 
        assert( SLAP_MR_IS_VALUE_OF_SYNTAX( usage ) != 0 );
 
-       /* validator should have refused an empty string */
-       assert( !BER_BVISEMPTY( val ) );
+       /* Ensure q is big enough, though validator should have caught this */
+       if ( BER_BVISEMPTY( val )) {
+               BER_BVZERO( normalized );
+               return LDAP_INVALID_SYNTAX;
+       }
 
        q = normalized->bv_val = slap_sl_malloc( val->bv_len + 1, ctx );
 
@@ -2329,16 +2317,13 @@ telephoneNumberNormalize(
                        *q++ = *p;
                }
        }
+       if ( q == normalized->bv_val ) {
+               *q++ = ' ';
+       }
        *q = '\0';
 
        normalized->bv_len = q - normalized->bv_val;
 
-       if( BER_BVISEMPTY( normalized ) ) {
-               slap_sl_free( normalized->bv_val, ctx );
-               BER_BVZERO( normalized );
-               return LDAP_INVALID_SYNTAX;
-       }
-
        return LDAP_SUCCESS;
 }