From 54d7a435a3b3acde952c3e71e558e946a9254345 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 21 May 2022 11:46:38 +0000
Subject: [PATCH] Don't parse tags in links

---
 src/Content/Text/BBCode.php | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php
index 4f7ff1f241..77ca4dbe26 100644
--- a/src/Content/Text/BBCode.php
+++ b/src/Content/Text/BBCode.php
@@ -1952,17 +1952,20 @@ class BBCode
 				 * - #[url=<anything>]<term>[/url]
 				 * - [url=<anything>]#<term>[/url]
 				 */
-				$text = preg_replace_callback("/(?:#\[url\=[^\[\]]*\]|\[url\=[^\[\]]*\]#)(.*?)\[\/url\]/ism", function($matches) use ($simple_html) {
-					if ($simple_html == self::ACTIVITYPUB) {
-						return '<a href="' . DI::baseUrl() . '/search?tag=' . rawurlencode($matches[1])
-							. '" data-tag="' . XML::escape($matches[1]) . '" rel="tag ugc">#'
-							. XML::escape($matches[1]) . '</a>';
-					} else {
-						return '#<a href="' . DI::baseUrl() . '/search?tag=' . rawurlencode($matches[1])
-							. '" class="tag" rel="tag" title="' . XML::escape($matches[1]) . '">'
-							. XML::escape($matches[1]) . '</a>';
-					}
-				}, $text);
+				self::performWithEscapedTags($text, ['url'], function ($text) use ($simple_html) {
+					$text = preg_replace_callback("/(?:#\[url\=[^\[\]]*\]|\[url\=[^\[\]]*\]#)(.*?)\[\/url\]/ism", function($matches) use ($simple_html) {
+						if ($simple_html == self::ACTIVITYPUB) {
+							return '<a href="' . DI::baseUrl() . '/search?tag=' . rawurlencode($matches[1])
+								. '" data-tag="' . XML::escape($matches[1]) . '" rel="tag ugc">#'
+								. XML::escape($matches[1]) . '</a>';
+						} else {
+							return '#<a href="' . DI::baseUrl() . '/search?tag=' . rawurlencode($matches[1])
+								. '" class="tag" rel="tag" title="' . XML::escape($matches[1]) . '">'
+								. XML::escape($matches[1]) . '</a>';
+						}
+					}, $text);
+					return $text;
+				});
 
 				// We need no target="_blank" rel="noopener noreferrer" for local links
 				// convert links start with DI::baseUrl() as local link without the target="_blank" rel="noopener noreferrer" attribute
-- 
2.39.5