]> git.sur5r.net Git - openldap/commitdiff
ITS#8778 Fix telephoneNumberNormalize("-" or " ")
authorHallvard Furuseth <hallvard@openldap.org>
Sun, 26 Nov 2017 20:22:23 +0000 (21:22 +0100)
committerHallvard Furuseth <hallvard@openldap.org>
Sun, 26 Nov 2017 20:22:23 +0000 (21:22 +0100)
servers/slapd/schema_init.c

index 16c4d1ce5d7804bb952331bdbc94de564b51b225..b51ce53e3c0f2ea0bb3bc4ab5c2f21ec25222915 100644 (file)
@@ -2290,7 +2290,7 @@ approxFilter(
        return LDAP_SUCCESS;
 }
 
        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,
 static int
 telephoneNumberNormalize(
        slap_mask_t usage,
@@ -2304,8 +2304,11 @@ telephoneNumberNormalize(
 
        assert( SLAP_MR_IS_VALUE_OF_SYNTAX( usage ) != 0 );
 
 
        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 );
 
 
        q = normalized->bv_val = slap_sl_malloc( val->bv_len + 1, ctx );
 
@@ -2314,16 +2317,13 @@ telephoneNumberNormalize(
                        *q++ = *p;
                }
        }
                        *q++ = *p;
                }
        }
+       if ( q == normalized->bv_val ) {
+               *q++ = ' ';
+       }
        *q = '\0';
 
        normalized->bv_len = q - normalized->bv_val;
 
        *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;
 }
 
        return LDAP_SUCCESS;
 }