filter: use filepath.Match to maintain consistency with other pattern

matching in podman

Following commit ensures that we maintain consistency with how pattern
matching is being carried out everywhere else in podman.

Switch from `regexp` to `filepath.Match`

For example https://github.com/containers/common/blob/main/libimage/filters.go#L162

[NO NEW TESTS NEEDED]

Signed-off-by: Aditya Rajan <arajan@redhat.com>
This commit is contained in:
Aditya Rajan 2021-11-19 13:35:32 +05:30
parent 671e5ee42d
commit 6011149cae
No known key found for this signature in database
GPG Key ID: 8E5A8A19DF7C8673
1 changed files with 6 additions and 17 deletions

View File

@ -4,7 +4,7 @@ import (
"encoding/json"
"fmt"
"net/http"
"regexp"
"path/filepath"
"strings"
"time"
@ -95,24 +95,13 @@ func PrepareFilters(r *http.Request) (*map[string][]string, error) {
return &filterMap, nil
}
func wildCardToRegexp(pattern string) string {
var result strings.Builder
for i, literal := range strings.Split(pattern, "*") {
// Replace * with .*
if i > 0 {
result.WriteString(".*")
}
// Quote any regular expression meta characters in the
// literal text.
result.WriteString(regexp.QuoteMeta(literal))
}
return result.String()
}
func matchPattern(pattern string, value string) bool {
if strings.Contains(pattern, "*") {
result, _ := regexp.MatchString(wildCardToRegexp(pattern), value)
return result
filter := fmt.Sprintf("*%s*", pattern)
filter = strings.ReplaceAll(filter, string(filepath.Separator), "|")
newName := strings.ReplaceAll(value, string(filepath.Separator), "|")
match, _ := filepath.Match(filter, newName)
return match
}
return false
}