Fix wrongful matching of last period in extended usernames
Fix anchor tags in some wikipedia URLs being matches as a hashtag
This commit is contained in:
		
							parent
							
								
									d1e1f26878
								
							
						
					
					
						commit
						9adf6e8736
					
				
					 4 changed files with 20 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -4,7 +4,7 @@ class Account < ApplicationRecord
 | 
			
		|||
  include Targetable
 | 
			
		||||
  include PgSearch
 | 
			
		||||
 | 
			
		||||
  MENTION_RE = /(?:^|[^\/\w])@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i
 | 
			
		||||
  MENTION_RE = /(?:^|[^\/\w])@([a-z0-9_]+(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i
 | 
			
		||||
  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
 | 
			
		||||
 | 
			
		||||
  # Local users
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
class Tag < ApplicationRecord
 | 
			
		||||
  has_and_belongs_to_many :statuses
 | 
			
		||||
 | 
			
		||||
  HASHTAG_RE = /(?:^|[^\/\w])#([[:word:]_]*[[:alpha:]_][[:word:]_]*)/i
 | 
			
		||||
  HASHTAG_RE = /(?:^|[^\/\)\w])#([[:word:]_]*[[:alpha:]_][[:word:]_]*)/i
 | 
			
		||||
 | 
			
		||||
  validates :name, presence: true, uniqueness: true
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -178,7 +178,6 @@ RSpec.describe Account, type: :model do
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  describe 'MENTION_RE' do
 | 
			
		||||
    subject { Account::MENTION_RE }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -190,6 +189,14 @@ RSpec.describe Account, type: :model do
 | 
			
		|||
      expect(subject.match('@alice Hey how are you?')[1]).to eq 'alice'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches full usernames' do
 | 
			
		||||
      expect(subject.match('@alice@example.com')[1]).to eq 'alice@example.com'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches full usernames with a dot at the end' do
 | 
			
		||||
      expect(subject.match('Hello @alice@example.com.')[1]).to eq 'alice@example.com'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches dot-prepended usernames' do
 | 
			
		||||
      expect(subject.match('.@alice I want everybody to see this')[1]).to eq 'alice'
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,15 @@
 | 
			
		|||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe Tag, type: :model do
 | 
			
		||||
  describe 'HASHTAG_RE' do
 | 
			
		||||
    subject { Tag::HASHTAG_RE }
 | 
			
		||||
 | 
			
		||||
    it 'does not match URLs with anchors with non-hashtag characters' do
 | 
			
		||||
      expect(subject.match('Check this out https://medium.com/@alice/some-article#.abcdef123')).to be_nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'does not match URLs with hashtag-like anchors' do
 | 
			
		||||
      expect(subject.match('https://en.wikipedia.org/wiki/Ghostbusters_(song)#Lawsuit')).to be_nil
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue