mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-03 23:26:29 +00:00
82fd65665f
bidichk checks for dangerous unicode character sequences (https://github.com/golangci/golangci-lint/pull/2330)
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package textmatch
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
// inputValue is a wrapper for string|[]byte.
|
|
//
|
|
// We hold both values to avoid string->[]byte and vice versa
|
|
// conversions when doing Match and MatchString.
|
|
type inputValue struct {
|
|
s string
|
|
b []byte
|
|
}
|
|
|
|
func newInputValue(s string) inputValue {
|
|
return inputValue{s: s, b: []byte(s)}
|
|
}
|
|
|
|
type containsLiteralMatcher struct{ value inputValue }
|
|
|
|
func (m *containsLiteralMatcher) MatchString(s string) bool {
|
|
return strings.Contains(s, m.value.s)
|
|
}
|
|
|
|
func (m *containsLiteralMatcher) Match(b []byte) bool {
|
|
return bytes.Contains(b, m.value.b)
|
|
}
|
|
|
|
type prefixLiteralMatcher struct{ value inputValue }
|
|
|
|
func (m *prefixLiteralMatcher) MatchString(s string) bool {
|
|
return strings.HasPrefix(s, m.value.s)
|
|
}
|
|
|
|
func (m *prefixLiteralMatcher) Match(b []byte) bool {
|
|
return bytes.HasPrefix(b, m.value.b)
|
|
}
|
|
|
|
type suffixLiteralMatcher struct{ value inputValue }
|
|
|
|
func (m *suffixLiteralMatcher) MatchString(s string) bool {
|
|
return strings.HasSuffix(s, m.value.s)
|
|
}
|
|
|
|
func (m *suffixLiteralMatcher) Match(b []byte) bool {
|
|
return bytes.HasSuffix(b, m.value.b)
|
|
}
|
|
|
|
type eqLiteralMatcher struct{ value inputValue }
|
|
|
|
func (m *eqLiteralMatcher) MatchString(s string) bool {
|
|
return m.value.s == s
|
|
}
|
|
|
|
func (m *eqLiteralMatcher) Match(b []byte) bool {
|
|
return bytes.Equal(m.value.b, b)
|
|
}
|
|
|
|
type prefixRunePredMatcher struct{ pred func(rune) bool }
|
|
|
|
func (m *prefixRunePredMatcher) MatchString(s string) bool {
|
|
r, _ := utf8.DecodeRuneInString(s)
|
|
return m.pred(r)
|
|
}
|
|
|
|
func (m *prefixRunePredMatcher) Match(b []byte) bool {
|
|
r, _ := utf8.DecodeRune(b)
|
|
return m.pred(r)
|
|
}
|