]> git.mxchange.org Git - friendica.git/commitdiff
Escape BBCode tag parsing avoidance tags when processing abstracts
authorHypolite Petovan <hypolite@mrpetovan.com>
Sun, 8 May 2022 02:19:11 +0000 (22:19 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sun, 8 May 2022 02:19:50 +0000 (22:19 -0400)
- Improve documentation for related methods

src/Content/Text/BBCode.php
src/Util/Strings.php

index c9a1bfe0521ec58fe56352c149989fce3895094e..4f7ff1f2411f9a78945627df8402470e72ed71ec 100644 (file)
@@ -2086,11 +2086,15 @@ class BBCode
         * @param string $text The text with BBCode
         * @return string The same text - but without "abstract" element
         */
-       public static function stripAbstract($text)
+       public static function stripAbstract(string $text): string
        {
                DI::profiler()->startRecording('rendering');
-               $text = preg_replace("/[\s|\n]*\[abstract\].*?\[\/abstract\][\s|\n]*/ism", ' ', $text);
-               $text = preg_replace("/[\s|\n]*\[abstract=.*?\].*?\[\/abstract][\s|\n]*/ism", ' ', $text);
+
+               $text = BBCode::performWithEscapedTags($text, ['code', 'noparse', 'nobb', 'pre'], function ($text) {
+                       $text = preg_replace("/[\s|\n]*\[abstract\].*?\[\/abstract\][\s|\n]*/ism", ' ', $text);
+                       $text = preg_replace("/[\s|\n]*\[abstract=.*?\].*?\[\/abstract][\s|\n]*/ism", ' ', $text);
+                       return $text;
+               });
 
                DI::profiler()->stopRecording();
                return $text;
@@ -2099,30 +2103,26 @@ class BBCode
        /**
         * Returns the value of the "abstract" element
         *
-        * @param string $text The text that maybe contains the element
+        * @param string $text  The text that maybe contains the element
         * @param string $addon The addon for which the abstract is meant for
         * @return string The abstract
         */
-       public static function getAbstract($text, $addon = '')
+       public static function getAbstract(string $text, string $addon = ''): string
        {
                DI::profiler()->startRecording('rendering');
-               $abstract = '';
-               $abstracts = [];
                $addon = strtolower($addon);
 
-               if (preg_match_all("/\[abstract=(.*?)\](.*?)\[\/abstract\]/ism", $text, $results, PREG_SET_ORDER)) {
-                       foreach ($results as $result) {
-                               $abstracts[strtolower($result[1])] = $result[2];
+               $abstract = BBCode::performWithEscapedTags($text, ['code', 'noparse', 'nobb', 'pre'], function ($text) use ($addon) {
+                       if ($addon && preg_match('#\[abstract=' . preg_quote($addon, '#') . '](.*?)\[/abstract]#ism', $text, $matches)) {
+                               return $matches[1];
                        }
-               }
 
-               if (isset($abstracts[$addon])) {
-                       $abstract = $abstracts[$addon];
-               }
+                       if (preg_match("#\[abstract](.*?)\[/abstract]#ism", $text, $matches)) {
+                               return $matches[1];
+                       }
 
-               if ($abstract == '' && preg_match("/\[abstract\](.*?)\[\/abstract\]/ism", $text, $result)) {
-                       $abstract = $result[1];
-               }
+                       return '';
+               });
 
                DI::profiler()->stopRecording();
                return $abstract;
@@ -2337,11 +2337,9 @@ class BBCode
         * @param array    $tagList A list of tag names, e.g ['noparse', 'nobb', 'pre']
         * @param callable $callback
         * @return string
-        * @throws Exception
-        *@see Strings::performWithEscapedBlocks
-        *
+        * @see Strings::performWithEscapedBlocks
         */
-       public static function performWithEscapedTags(string $text, array $tagList, callable $callback)
+       public static function performWithEscapedTags(string $text, array $tagList, callable $callback): string
        {
                $tagList = array_map('preg_quote', $tagList);
 
index 3870074e1a7be84cfc3e6b1f4f17ab37fb4ee202..8666d30c18310d68574d37d72940c307b37ae52d 100644 (file)
@@ -485,9 +485,8 @@ class Strings
         * @param string   $regex
         * @param callable $callback
         * @return string
-        * @throws \Exception
         */
-       public static function performWithEscapedBlocks(string $text, string $regex, callable $callback)
+       public static function performWithEscapedBlocks(string $text, string $regex, callable $callback): string
        {
                // Enables nested use
                $executionId = random_int(PHP_INT_MAX / 10, PHP_INT_MAX);