From: Howard Chu Date: Thu, 6 Oct 2011 22:22:40 +0000 (-0700) Subject: ITS#7059 replace previous patch X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=507238713b71208ec4f262f312cb495a302df9e9;p=openldap ITS#7059 replace previous patch Bug was caused by postalAddressNormalize sending 0-length values to UTF8StringNormalize. --- diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c index c2e79d0e0b..14064af230 100644 --- a/servers/slapd/schema_init.c +++ b/servers/slapd/schema_init.c @@ -1853,12 +1853,12 @@ UTF8StringNormalize( } nvalue.bv_val[nvalue.bv_len] = '\0'; - } else if ( nvalue.bv_len ) { + } else if ( tmp.bv_len ) { /* string of all spaces is treated as one space */ nvalue.bv_val[0] = ' '; nvalue.bv_val[1] = '\0'; nvalue.bv_len = 1; - } + } /* should never be entered with 0-length val */ *normalized = nvalue; return LDAP_SUCCESS; @@ -2332,13 +2332,18 @@ postalAddressNormalize( } lines[l].bv_len = &val->bv_val[c] - lines[l].bv_val; - normalized->bv_len = l; + normalized->bv_len = c = l; - for ( l = 0; !BER_BVISNULL( &lines[l] ); l++ ) { + for ( l = 0; l <= c; l++ ) { /* NOTE: we directly normalize each line, * without unescaping the values, since the special * values '\24' ('$') and '\5C' ('\') are not affected * by normalization */ + if ( !lines[l].bv_len ) { + nlines[l].bv_len = 0; + nlines[l].bv_val = NULL; + continue; + } rc = UTF8StringNormalize( usage, NULL, xmr, &lines[l], &nlines[l], ctx ); if ( rc != LDAP_SUCCESS ) { rc = LDAP_INVALID_SYNTAX; @@ -2351,7 +2356,7 @@ postalAddressNormalize( normalized->bv_val = slap_sl_malloc( normalized->bv_len + 1, ctx ); p = normalized->bv_val; - for ( l = 0; !BER_BVISNULL( &nlines[l] ); l++ ) { + for ( l = 0; l <= c ; l++ ) { p = lutil_strbvcopy( p, &nlines[l] ); *p++ = '$'; }