diff --git a/src/restic/filter/filter.go b/src/restic/filter/filter.go index 4092b4025..7105a76a0 100644 --- a/src/restic/filter/filter.go +++ b/src/restic/filter/filter.go @@ -21,6 +21,8 @@ func Match(pattern, str string) (matched bool, err error) { return true, nil } + pattern = filepath.Clean(pattern) + if str == "" { return false, ErrBadString } diff --git a/src/restic/filter/filter_test.go b/src/restic/filter/filter_test.go index d44dc14e8..2fb04cdf5 100644 --- a/src/restic/filter/filter_test.go +++ b/src/restic/filter/filter_test.go @@ -36,6 +36,17 @@ var matchTests = []struct { {"tesT.*", "/foo/bar/test.go", false}, {"bar/*", "/foo/bar/baz", true}, {"bar", "/foo/bar", true}, + {"/foo/bar", "/foo/bar", true}, + {"/foo/bar/", "/foo/bar", true}, + {"/foo/bar", "/foo/baz", false}, + {"/foo/bar", "/foo/baz/", false}, + {"/foo///bar", "/foo/bar", true}, + {"/foo/../bar", "/foo/bar", false}, + {"/foo/../bar", "/bar", true}, + {"/foo", "/foo/baz", true}, + {"/foo/", "/foo/baz", true}, + {"/foo/*", "/foo", false}, + {"/foo/*", "/foo/baz", true}, {"bar", "/foo/bar/baz", true}, {"bar", "/foo/bar/test.go", true}, {"/foo/*test.*", "/foo/bar/test.go", false}, @@ -74,6 +85,8 @@ var matchTests = []struct { {"user/**/important*", "/home/user/work/x/y/hidden/x", false}, {"user/**/hidden*/**/c", "/home/user/work/x/y/hidden/z/a/b/c", true}, {"c:/foo/*test.*", "c:/foo/bar/test.go", false}, + {"c:/foo", "c:/foo/bar", true}, + {"c:/foo/", "c:/foo/bar", true}, {"c:/foo/*/test.*", "c:/foo/bar/test.go", true}, {"c:/foo/*/bar/test.*", "c:/foo/bar/test.go", false}, }