about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Yip <yipdw@member.fsf.org>2018-06-05 02:49:28 -0500
committerDavid Yip <yipdw@member.fsf.org>2018-06-05 02:49:28 -0500
commita640c322c19013647cbd19ac907dd18b57c2b1b8 (patch)
tree8f50ca6a05dd4c381f311db7d84256974b4d4933
parent37d495eeeb810127e0c6c62bff865c1ba66f45c8 (diff)
Escape metacharacters in non-whole-word keyword mutes. Fixes #533.
Also addresses #463.
-rw-r--r--app/models/glitch/keyword_mute.rb2
-rw-r--r--spec/models/glitch/keyword_mute_spec.rb8
2 files changed, 8 insertions, 2 deletions
diff --git a/app/models/glitch/keyword_mute.rb b/app/models/glitch/keyword_mute.rb
index e7cbbe617..7d0002afd 100644
--- a/app/models/glitch/keyword_mute.rb
+++ b/app/models/glitch/keyword_mute.rb
@@ -50,7 +50,7 @@ class Glitch::KeywordMute < ApplicationRecord
     end
 
     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
 
diff --git a/spec/models/glitch/keyword_mute_spec.rb b/spec/models/glitch/keyword_mute_spec.rb
index 79225e3b9..443832ac7 100644
--- a/spec/models/glitch/keyword_mute_spec.rb
+++ b/spec/models/glitch/keyword_mute_spec.rb
@@ -79,12 +79,18 @@ RSpec.describe Glitch::KeywordMute, type: :model do
         expect(matcher.matches?('(hot take)')).to be_truthy
       end
 
-      it 'escapes metacharacters in keywords' do
+      it 'escapes metacharacters in whole-word keywords' do
         Glitch::KeywordMute.create!(account: alice, keyword: '(hot take)')
 
         expect(matcher.matches?('(hot take)')).to be_truthy
       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
         Glitch::KeywordMute.create!(account: alice, keyword: 'großeltern')