From efd1a4f717afa83d3d3609f0d70e4da151a8dc9b Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:00:23 +0200 Subject: [bugfix] Use better plaintext representation of status for filtering (#3301) * [bugfix] Use better plaintext representation of status for filtering * add new deps to readme * lint * update tests * update regexes * address review comments * remove now unused xxhash * whoops, wrong logger * Merge branch 'main' into status_filtering_bugfix * put cache in caches struct * pain --- internal/gtsmodel/filter.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'internal/gtsmodel') diff --git a/internal/gtsmodel/filter.go b/internal/gtsmodel/filter.go index e670e6fc0..95047a44f 100644 --- a/internal/gtsmodel/filter.go +++ b/internal/gtsmodel/filter.go @@ -20,6 +20,8 @@ package gtsmodel import ( "regexp" "time" + + "github.com/superseriousbusiness/gotosocial/internal/util" ) // Filter stores a filter created by a local account. @@ -61,14 +63,23 @@ type FilterKeyword struct { // Compile will compile this FilterKeyword as a prepared regular expression. func (k *FilterKeyword) Compile() (err error) { - var wordBreak string - if k.WholeWord != nil && *k.WholeWord { - wordBreak = `\b` + var ( + wordBreakStart string + wordBreakEnd string + ) + + if util.PtrOrZero(k.WholeWord) { + // Either word boundary or + // whitespace or start of line. + wordBreakStart = `(?:\b|\s|^)` + // Either word boundary or + // whitespace or end of line. + wordBreakEnd = `(?:\b|\s|$)` } // Compile keyword filter regexp. quoted := regexp.QuoteMeta(k.Keyword) - k.Regexp, err = regexp.Compile(`(?i)` + wordBreak + quoted + wordBreak) + k.Regexp, err = regexp.Compile(`(?i)` + wordBreakStart + quoted + wordBreakEnd) return // caller is expected to wrap this error } -- cgit v1.2.3