diff --git a/filter.go b/filter.go index 7eae310f..3858a286 100644 --- a/filter.go +++ b/filter.go @@ -82,7 +82,10 @@ func CompileFilter(filter string) (*ber.Packet, error) { if err != nil { return nil, err } - if pos != len(filter) { + switch { + case pos > len(filter): + return nil, NewError(ErrorFilterCompile, errors.New("ldap: unexpected end of filter")) + case pos < len(filter): return nil, NewError(ErrorFilterCompile, errors.New("ldap: finished compiling filter with extra at end: "+fmt.Sprint(filter[pos:]))) } return packet, nil diff --git a/filter_test.go b/filter_test.go index ae1b79b0..2b019ac5 100644 --- a/filter_test.go +++ b/filter_test.go @@ -131,6 +131,12 @@ var testFilters = []compileTest{ expectedType: 0, expectedErr: "unexpected end of filter", }, + compileTest{ + filterStr: `((cn=)`, + expectedFilter: ``, + expectedType: 0, + expectedErr: "unexpected end of filter", + }, compileTest{ filterStr: `(&(objectclass=inetorgperson)(cn=中文))`, expectedFilter: `(&(objectclass=inetorgperson)(cn=\e4\b8\ad\e6\96\87))`,