From bc2558eb869901530e14fe8ae54ba5aaba60eb68 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Sun, 26 Nov 2017 21:22:23 +0100 Subject: [PATCH] ITS#8778 Fix telephoneNumberNormalize("-" or " ") --- servers/slapd/schema_init.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c index 3b3eb14d7d..ff72c9974b 100644 --- a/servers/slapd/schema_init.c +++ b/servers/slapd/schema_init.c @@ -2225,7 +2225,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, @@ -2239,8 +2239,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 ); @@ -2249,16 +2252,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; } -- 2.39.5