ITS#7059 replace previous patch

Bug was caused by postalAddressNormalize sending 0-length values
to UTF8StringNormalize.
This commit is contained in:
Howard Chu 2011-10-06 15:22:40 -07:00
parent d0dd8616f1
commit 507238713b

View File

@ -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++ = '$';
}