Escape metacharacters in non-whole-word keyword mutes. Fixes #533.

Also addresses #463.
signup-info-prompt
David Yip 2018-06-05 02:49:28 -05:00
parent 37d495eeeb
commit a640c322c1
No known key found for this signature in database
GPG Key ID: 7DA0036508FCC0CC
2 changed files with 8 additions and 2 deletions

View File

@ -50,7 +50,7 @@ class Glitch::KeywordMute < ApplicationRecord
end end
def matches?(str) def matches?(str)
str =~ (whole_word ? boundary_regex_for_keyword : /#{keyword}/i) str =~ (whole_word ? boundary_regex_for_keyword : /#{Regexp.escape(keyword)}/i)
end end
end end

View File

@ -79,12 +79,18 @@ RSpec.describe Glitch::KeywordMute, type: :model do
expect(matcher.matches?('(hot take)')).to be_truthy expect(matcher.matches?('(hot take)')).to be_truthy
end end
it 'escapes metacharacters in keywords' do it 'escapes metacharacters in whole-word keywords' do
Glitch::KeywordMute.create!(account: alice, keyword: '(hot take)') Glitch::KeywordMute.create!(account: alice, keyword: '(hot take)')
expect(matcher.matches?('(hot take)')).to be_truthy expect(matcher.matches?('(hot take)')).to be_truthy
end end
it 'escapes metacharacters in non-whole-word keywords' do
Glitch::KeywordMute.create!(account: alice, keyword: '(-', whole_word: false)
expect(matcher.matches?('bad (-)')).to be_truthy
end
it 'uses case-folding rules appropriate for more than just English' do it 'uses case-folding rules appropriate for more than just English' do
Glitch::KeywordMute.create!(account: alice, keyword: 'großeltern') Glitch::KeywordMute.create!(account: alice, keyword: 'großeltern')