Yes @Howard Chu.

The code in the file libraries/libldap/filter.c file: In function 
put_filter_list:

        if( tag == LDAP_FILTER_NOT && ( next == NULL || *str )) {
                return -1;
        }
This code is only for NOT filters. If there is a trailing space, *str will be 
true, and the function will incorrectly return an error (-1). 
To handle trailing spaces for NOT filters, we should add some code to 
check/skip for tailing spaces performing the final check for a NOT filter.

//New code - start
if( tag == LDAP_FILTER_NOT && next != NULL ) {
                while ( *str && LDAP_SPACE( (unsigned char) *str ) ) {
                        str++;
                }
        }
//New code - end

if( tag == LDAP_FILTER_NOT && ( next == NULL || *str )) {
        return -1;
}

The above new code ensures that filters with spaces between components are 
parsed correctly for NOT filters.

Share your thoughts on these code changes.

Thank you.

Reply via email to