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.