Warn if stateful ParserOutput transforms are used
[lhc/web/wiklou.git] / includes / parser / StripState.php
index 7e38acc..4ed176c 100644 (file)
@@ -37,16 +37,21 @@ class StripState {
        const UNSTRIP_RECURSION_LIMIT = 20;
 
        /**
-        * @param string $prefix
+        * @param string|null $prefix
+        * @since 1.26 The prefix argument should be omitted, as the strip marker
+        *  prefix string is now a constant.
         */
-       public function __construct( $prefix ) {
-               $this->prefix = $prefix;
-               $this->data = array(
-                       'nowiki' => array(),
-                       'general' => array()
-               );
-               $this->regex = "/{$this->prefix}([^\x7f]+)" . Parser::MARKER_SUFFIX . '/';
-               $this->circularRefGuard = array();
+       public function __construct( $prefix = null ) {
+               if ( $prefix !== null ) {
+                       wfDeprecated( __METHOD__ . ' with called with $prefix argument' .
+                               ' (call with no arguments instead)', '1.26' );
+               }
+               $this->data = [
+                       'nowiki' => [],
+                       'general' => []
+               ];
+               $this->regex = '/' . Parser::MARKER_PREFIX . "([^\x7f<>&'\"]+)" . Parser::MARKER_SUFFIX . '/';
+               $this->circularRefGuard = [];
        }
 
        /**
@@ -119,7 +124,7 @@ class StripState {
 
                $oldType = $this->tempType;
                $this->tempType = $type;
-               $text = preg_replace_callback( $this->regex, array( $this, 'unstripCallback' ), $text );
+               $text = preg_replace_callback( $this->regex, [ $this, 'unstripCallback' ], $text );
                $this->tempType = $oldType;
                return $text;
        }
@@ -166,10 +171,10 @@ class StripState {
         * @return StripState
         */
        public function getSubState( $text ) {
-               $subState = new StripState( $this->prefix );
+               $subState = new StripState();
                $pos = 0;
                while ( true ) {
-                       $startPos = strpos( $text, $this->prefix, $pos );
+                       $startPos = strpos( $text, Parser::MARKER_PREFIX, $pos );
                        $endPos = strpos( $text, Parser::MARKER_SUFFIX, $pos );
                        if ( $startPos === false || $endPos === false ) {
                                break;
@@ -202,7 +207,7 @@ class StripState {
         * @return array
         */
        public function merge( $otherState, $texts ) {
-               $mergePrefix = Parser::getRandomString();
+               $mergePrefix = wfRandomString( 16 );
 
                foreach ( $otherState->data as $type => $items ) {
                        foreach ( $items as $key => $value ) {
@@ -211,7 +216,7 @@ class StripState {
                }
 
                $this->tempMergePrefix = $mergePrefix;
-               $texts = preg_replace_callback( $otherState->regex, array( $this, 'mergeCallback' ), $texts );
+               $texts = preg_replace_callback( $otherState->regex, [ $this, 'mergeCallback' ], $texts );
                $this->tempMergePrefix = null;
                return $texts;
        }
@@ -222,7 +227,7 @@ class StripState {
         */
        protected function mergeCallback( $m ) {
                $key = $m[1];
-               return "{$this->prefix}{$this->tempMergePrefix}-$key" . Parser::MARKER_SUFFIX;
+               return Parser::MARKER_PREFIX . $this->tempMergePrefix . '-' . $key . Parser::MARKER_SUFFIX;
        }
 
        /**