summaryrefslogtreecommitdiffstats
path: root/ldap/servers/plugins/syntaxes/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/plugins/syntaxes/string.c')
-rw-r--r--ldap/servers/plugins/syntaxes/string.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/ldap/servers/plugins/syntaxes/string.c b/ldap/servers/plugins/syntaxes/string.c
index 21ff5d1b..9131f9f3 100644
--- a/ldap/servers/plugins/syntaxes/string.c
+++ b/ldap/servers/plugins/syntaxes/string.c
@@ -601,7 +601,7 @@ string_assertion2keys_ava(
size_t len;
char *w, *c;
Slapi_Value *tmpval=NULL;
- char *alt = NULL;
+ char *alt = NULL;
switch ( ftype ) {
case LDAP_FILTER_EQUALITY_FAST:
@@ -613,12 +613,14 @@ string_assertion2keys_ava(
}
memcpy(tmpval->bv.bv_val,slapi_value_get_string(val),len);
tmpval->bv.bv_val[len]='\0';
- /* 3rd arg: 1 - trim leading blanks */
+ /* 3rd arg: 1 - trim leading blanks */
value_normalize_ext(tmpval->bv.bv_val, syntax, 1, &alt );
- if (alt) {
- slapi_ch_free_string(&tmpval->bv.bv_val);
- tmpval->bv.bv_val = alt;
- }
+ if (alt) {
+ if (len >= tmpval->bv.bv_len) {
+ slapi_ch_free_string(&tmpval->bv.bv_val);
+ }
+ tmpval->bv.bv_val = alt;
+ }
tmpval->bv.bv_len=strlen(tmpval->bv.bv_val);
break;
case LDAP_FILTER_EQUALITY:
@@ -627,7 +629,7 @@ string_assertion2keys_ava(
/* 3rd arg: 1 - trim leading blanks */
value_normalize_ext( (*ivals)[0]->bv.bv_val, syntax, 1, &alt );
if (alt) {
- slapi_ch_free_string(&(*ivals)[0]->bv.bv_val);
+ slapi_ch_free_string(&(*ivals)[0]->bv.bv_val);
(*ivals)[0]->bv.bv_val = alt;
}
(*ivals)[0]->bv.bv_len = strlen( (*ivals)[0]->bv.bv_val );
@@ -687,8 +689,11 @@ string_assertion2keys_sub(
int maxsublen;
char *comp_buf = NULL;
char *altinit = NULL;
+ char *oaltinit = NULL;
char **altany = NULL;
+ char **oaltany = NULL;
char *altfinal = NULL;
+ char *oaltfinal = NULL;
int anysize = 0;
slapi_pblock_get(pb, SLAPI_SYNTAX_SUBSTRLENS, &substrlens);
@@ -719,6 +724,7 @@ string_assertion2keys_sub(
if ( initial != NULL ) {
/* 3rd arg: 0 - DO NOT trim leading blanks */
value_normalize_ext( initial, syntax, 0, &altinit );
+ oaltinit = altinit;
if (NULL == altinit) {
altinit = initial;
}
@@ -737,11 +743,14 @@ string_assertion2keys_sub(
anysize++;
}
altany = (char **)slapi_ch_calloc(anysize + 1, sizeof(char *));
+ oaltany = (char **)slapi_ch_calloc(anysize + 1, sizeof(char *));
for ( i = 0; any != NULL && any[i] != NULL; i++ ) {
/* 3rd arg: 0 - DO NOT trim leading blanks */
value_normalize_ext( any[i], syntax, 0, &altany[i] );
if (NULL == altany[i]) {
altany[i] = any[i];
+ } else {
+ oaltany[i] = altany[i];
}
len = strlen( altany[i] );
if ( len >= substrlens[INDEX_SUBSTRMIDDLE] ) {
@@ -751,6 +760,7 @@ string_assertion2keys_sub(
if ( final != NULL ) {
/* 3rd arg: 0 - DO NOT trim leading blanks */
value_normalize_ext( final, syntax, 0, &altfinal );
+ oaltfinal = altfinal;
if (NULL == altfinal) {
altfinal = final;
}
@@ -784,10 +794,8 @@ string_assertion2keys_sub(
if ( altinit != NULL ) {
substring_comp_keys( ivals, &nsubs, altinit, initiallen, '^', syntax,
comp_buf, substrlens );
- if (altinit != initial) {
- slapi_ch_free_string(&altinit);
- }
}
+ slapi_ch_free_string(&oaltinit);
for ( i = 0; altany != NULL && altany[i] != NULL; i++ ) {
len = strlen( altany[i] );
if ( len < substrlens[INDEX_SUBSTRMIDDLE] ) {
@@ -795,18 +803,15 @@ string_assertion2keys_sub(
}
substring_comp_keys( ivals, &nsubs, altany[i], len, 0, syntax,
comp_buf, substrlens );
- if (altany[i] != any[i]) {
- slapi_ch_free_string(&altany[i]);
- }
+ slapi_ch_free_string(&oaltany[i]);
}
+ slapi_ch_free((void **)&oaltany);
slapi_ch_free((void **)&altany);
if ( altfinal != NULL ) {
substring_comp_keys( ivals, &nsubs, altfinal, finallen, '$', syntax,
comp_buf, substrlens );
- if (altfinal != final) {
- slapi_ch_free_string(&final);
- }
}
+ slapi_ch_free_string(&oaltfinal);
(*ivals)[nsubs] = NULL;
slapi_ch_free_string(&comp_buf);