diff --git a/servers/slapd/filter.c b/servers/slapd/filter.c index 690e62ee3e..efffa48388 100644 --- a/servers/slapd/filter.c +++ b/servers/slapd/filter.c @@ -544,7 +544,11 @@ get_substring_filter( #else Debug( LDAP_DEBUG_FILTER, " INITIAL\n", 0, 0, 0 ); #endif - if ( f->f_sub_initial != NULL ) { + + if ( f->f_sub_initial != NULL + || f->f_sub_any != NULL + || f->f_sub_final != NULL ) + { ber_bvfree( value ); goto return_error; } @@ -568,6 +572,12 @@ get_substring_filter( #else Debug( LDAP_DEBUG_FILTER, " ANY\n", 0, 0, 0 ); #endif + + if ( f->f_sub_final != NULL ) { + ber_bvfree( value ); + goto return_error; + } + if( ber_bvecadd( &f->f_sub_any, value ) < 0 ) { ber_bvfree( value ); goto return_error; @@ -591,10 +601,12 @@ get_substring_filter( #else Debug( LDAP_DEBUG_FILTER, " FINAL\n", 0, 0, 0 ); #endif + if ( f->f_sub_final != NULL ) { ber_bvfree( value ); goto return_error; } + f->f_sub_final = value; if( fstr ) {