From 887e64efd4abbf3980e008c7a5441b44fbd6c766 Mon Sep 17 00:00:00 2001
From: Adam Niedzielski <adamsunday@gmail.com>
Date: Thu, 25 Jul 2024 17:02:58 +0200
Subject: [PATCH] Allow @ at the end of an URL (#31124)

---
 config/initializers/twitter_regex.rb | 2 +-
 spec/lib/text_formatter_spec.rb      | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/config/initializers/twitter_regex.rb b/config/initializers/twitter_regex.rb
index 9ca4eb0da..b932e97e2 100644
--- a/config/initializers/twitter_regex.rb
+++ b/config/initializers/twitter_regex.rb
@@ -9,7 +9,7 @@ module Twitter::TwitterText
 
   class Regex
     REGEXEN[:valid_general_url_path_chars] = /[^\p{White_Space}<>()?]/iou
-    REGEXEN[:valid_url_path_ending_chars] = /[^\p{White_Space}()?!*"'「」<>;:=,.$%\[\]~&|@]|(?:#{REGEXEN[:valid_url_balanced_parens]})/iou
+    REGEXEN[:valid_url_path_ending_chars] = /[^\p{White_Space}()?!*"'「」<>;:=,.$%\[\]~&|]|(?:#{REGEXEN[:valid_url_balanced_parens]})/iou
     REGEXEN[:valid_url_balanced_parens] = /
       \(
         (?:
diff --git a/spec/lib/text_formatter_spec.rb b/spec/lib/text_formatter_spec.rb
index 8b922c018..bde17bb79 100644
--- a/spec/lib/text_formatter_spec.rb
+++ b/spec/lib/text_formatter_spec.rb
@@ -224,6 +224,14 @@ RSpec.describe TextFormatter do
       end
     end
 
+    context 'when given a URL with trailing @ symbol' do
+      let(:text) { 'https://gta.fandom.com/wiki/TW@ Content' }
+
+      it 'matches the full URL' do
+        expect(subject).to include 'href="https://gta.fandom.com/wiki/TW@"'
+      end
+    end
+
     context 'when given a URL containing unsafe code (XSS attack, visible part)' do
       let(:text) { 'http://example.com/b<del>b</del>' }