Escape all regexp control characters (#1753)

* Escape all regexp control characters
* Add #1752 unit tests

Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
kermieisinthehouse 2021-09-23 03:08:08 +00:00 committed by GitHub
parent cceaff780b
commit 1e8a8efe3e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 15 deletions

View file

@ -23,6 +23,10 @@ func TestPerformerScenes(t *testing.T) {
"performer + name",
`(?i)(?:^|_|[^\w\d])performer[.\-_ ]*\+[.\-_ ]*name(?:$|_|[^\w\d])`,
},
{
`performer + name\`,
`(?i)(?:^|_|[^\w\d])performer[.\-_ ]*\+[.\-_ ]*name\\(?:$|_|[^\w\d])`,
},
}
for _, p := range performerNames {

View file

@ -28,6 +28,12 @@ var testStudioCases = []testStudioCase{
"",
"",
},
{
`studio + name\`,
`(?i)(?:^|_|[^\w\d])studio[.\-_ ]*\+[.\-_ ]*name\\(?:$|_|[^\w\d])`,
"",
"",
},
{
"studio name",
`(?i)(?:^|_|[^\w\d])studio[.\-_ ]*name(?:$|_|[^\w\d])`,
@ -40,6 +46,12 @@ var testStudioCases = []testStudioCase{
"alias + name",
`(?i)(?:^|_|[^\w\d])alias[.\-_ ]*\+[.\-_ ]*name(?:$|_|[^\w\d])`,
},
{
`studio + name\`,
`(?i)(?:^|_|[^\w\d])studio[.\-_ ]*\+[.\-_ ]*name\\(?:$|_|[^\w\d])`,
`alias + name\`,
`(?i)(?:^|_|[^\w\d])alias[.\-_ ]*\+[.\-_ ]*name\\(?:$|_|[^\w\d])`,
},
}
func TestStudioScenes(t *testing.T) {

View file

@ -28,6 +28,12 @@ var testTagCases = []testTagCase{
"",
"",
},
{
`tag + name\`,
`(?i)(?:^|_|[^\w\d])tag[.\-_ ]*\+[.\-_ ]*name\\(?:$|_|[^\w\d])`,
"",
"",
},
{
"tag name",
`(?i)(?:^|_|[^\w\d])tag[.\-_ ]*name(?:$|_|[^\w\d])`,
@ -40,6 +46,12 @@ var testTagCases = []testTagCase{
"alias + name",
`(?i)(?:^|_|[^\w\d])alias[.\-_ ]*\+[.\-_ ]*name(?:$|_|[^\w\d])`,
},
{
`tag + name\`,
`(?i)(?:^|_|[^\w\d])tag[.\-_ ]*\+[.\-_ ]*name\\(?:$|_|[^\w\d])`,
`alias + name\`,
`(?i)(?:^|_|[^\w\d])alias[.\-_ ]*\+[.\-_ ]*name\\(?:$|_|[^\w\d])`,
},
}
func TestTagScenes(t *testing.T) {

View file

@ -25,22 +25,9 @@ import (
const separatorChars = `.\-_ `
// fixes #1292
func escapePathRegex(name string) string {
ret := name
chars := `+*?()|[]{}^$`
for _, c := range chars {
cStr := string(c)
ret = strings.ReplaceAll(ret, cStr, `\`+cStr)
}
return ret
}
func getPathQueryRegex(name string) string {
// escape specific regex characters
name = escapePathRegex(name)
name = regexp.QuoteMeta(name)
// handle path separators
const separator = `[` + separatorChars + `]`
@ -52,7 +39,7 @@ func getPathQueryRegex(name string) string {
func nameMatchesPath(name, path string) bool {
// escape specific regex characters
name = escapePathRegex(name)
name = regexp.QuoteMeta(name)
name = strings.ToLower(name)
path = strings.ToLower(path)

View file

@ -18,6 +18,7 @@
* Added sv-SE language option. ([#1691](https://github.com/stashapp/stash/pull/1691))
### 🐛 Bug fixes
* Fix panic in autotagger when backslash character present in tag/performer/studio name. ([#1753](https://github.com/stashapp/stash/pull/1753))
* Fix Scene Player CLS issue ([#1739](https://github.com/stashapp/stash/pull/1739))
* Fix Scene Edit Panel form layout for mobile and desktop. ([#1737](https://github.com/stashapp/stash/pull/1737))
* Fix Gallery create plugin hook not being invoked when creating Gallery from folder. ([#1731](https://github.com/stashapp/stash/pull/1731))