X-Git-Url: https://git.sur5r.net/?p=openldap;a=blobdiff_plain;f=servers%2Fslapd%2Fschema_init.c;h=b51ce53e3c0f2ea0bb3bc4ab5c2f21ec25222915;hp=16c4d1ce5d7804bb952331bdbc94de564b51b225;hb=57253688b381375ae8b5a1ffce7a2d2d369bb743;hpb=f5da6638ecb8ea97df53856542231df4a3befca1 diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c index 16c4d1ce5d..b51ce53e3c 100644 --- a/servers/slapd/schema_init.c +++ b/servers/slapd/schema_init.c @@ -2290,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, @@ -2304,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 ); @@ -2314,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; }