From fff565a80b27617c1657aaef27578893c6b99ebe Mon Sep 17 00:00:00 2001
From: Hypolite Petovan <hypolite@mrpetovan.com>
Date: Wed, 30 Dec 2020 22:23:58 -0500
Subject: [PATCH] Prevent alt text of emoji image tags to be converted to
 smilies in BBCode::convert

---
 src/Content/Text/BBCode.php | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php
index ea818d7f31..25812db61c 100644
--- a/src/Content/Text/BBCode.php
+++ b/src/Content/Text/BBCode.php
@@ -1393,6 +1393,16 @@ class BBCode
 					$text = self::convertAttachment($text, $simple_html, $try_oembed);
 				}
 
+				$nosmile = strpos($text, '[nosmile]') !== false;
+				$text = str_replace('[nosmile]', '', $text);
+
+				// Replace non graphical smilies for external posts
+				if (!$nosmile && !$for_plaintext) {
+					$text = self::performWithEscapedTags($text, ['img'], function ($text) {
+						return Smilies::replace($text);
+					});
+				}
+
 				// leave open the posibility of [map=something]
 				// this is replaced in Item::prepareBody() which has knowledge of the item location
 				if (strpos($text, '[/map]') !== false) {
@@ -1506,11 +1516,6 @@ class BBCode
 					});
 				}
 
-				// This is actually executed in Item::prepareBody()
-
-				$nosmile = strpos($text, '[nosmile]') !== false;
-				$text = str_replace('[nosmile]', '', $text);
-
 				// Check for font change text
 				$text = preg_replace("/\[font=(.*?)\](.*?)\[\/font\]/sm", "<span style=\"font-family: $1;\">$2</span>", $text);
 
@@ -1683,13 +1688,6 @@ class BBCode
 					$text = preg_replace("/\[event\-id\](.*?)\[\/event\-id\]/ism", '', $text);
 				}
 
-				// Replace non graphical smilies for external posts
-				if (!$nosmile && !$for_plaintext) {
-					$text = self::performWithEscapedTags($text, ['img'], function ($text) {
-						return Smilies::replace($text);
-					});
-				}
-
 				if (!$for_plaintext && DI::config()->get('system', 'big_emojis') && ($simple_html != self::DIASPORA)) {
 					$conv = html_entity_decode(str_replace([' ', "\n", "\r"], '', $text));
 					// Emojis are always 4 byte Unicode characters
-- 
2.39.5