jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/390356 )

Change subject: Don't break when reference names contain []
......................................................................


Don't break when reference names contain []

Bug: T29694
Bug: T179544
Depends-On: I189bdefbc9034cf8d221a89d7158195de1c0fa6c
Change-Id: Iec3439f76ecc2a3543b30b35f8735c92b0cfb711
---
M includes/Cite.php
M tests/parser/citeParserTests.txt
2 files changed, 42 insertions(+), 14 deletions(-)

Approvals:
  C. Scott Ananian: Looks good to me, approved
  jenkins-bot: Verified
  Jforrester: Looks good to me, but someone else must approve



diff --git a/includes/Cite.php b/includes/Cite.php
index 126380e..e75eb2d 100644
--- a/includes/Cite.php
+++ b/includes/Cite.php
@@ -411,13 +411,13 @@
                        }
                        if ( isset( $argv['name'] ) ) {
                                // Key given.
-                               $key = Sanitizer::escapeIdForAttribute( 
$argv['name'] );
+                               $key = trim( $argv['name'] );
                                unset( $argv['name'] );
                                --$cnt;
                        }
                        if ( isset( $argv['follow'] ) ) {
                                // Follow given.
-                               $follow = Sanitizer::escapeIdForAttribute( 
$argv['follow'] );
+                               $follow = trim( $argv['follow'] );
                                unset( $argv['follow'] );
                                --$cnt;
                        }
@@ -814,10 +814,10 @@
                if ( !is_array( $val ) ) {
                        return wfMessage(
                                        'cite_references_link_one',
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                self::getReferencesKey( $key )
                                        ),
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                $this->refKey( $key )
                                        ),
                                        $this->referenceText( $key, $val )
@@ -827,7 +827,7 @@
                if ( isset( $val['follow'] ) ) {
                        return wfMessage(
                                        'cite_references_no_link',
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                self::getReferencesKey( 
$val['follow'] )
                                        ),
                                        $text
@@ -836,7 +836,7 @@
                if ( !isset( $val['count'] ) ) {
                        // this handles the case of section preview for 
list-defined references
                        return wfMessage( 'cite_references_link_many',
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                self::getReferencesKey( $key . 
"-" . ( isset( $val['key'] ) ? $val['key'] : '' ) )
                                        ),
                                        '',
@@ -846,10 +846,10 @@
                if ( $val['count'] < 0 ) {
                        return wfMessage(
                                        'cite_references_link_one',
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                self::getReferencesKey( 
$val['key'] )
                                        ),
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                # $this->refKey( $val['key'], 
$val['count'] )
                                                $this->refKey( $val['key'] )
                                        ),
@@ -863,10 +863,10 @@
                if ( $val['count'] === 0 ) {
                        return wfMessage(
                                        'cite_references_link_one',
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                self::getReferencesKey( $key . 
"-" . $val['key'] )
                                        ),
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                # $this->refKey( $key, 
$val['count'] ),
                                                $this->refKey( $key, 
$val['key'] . "-" . $val['count'] )
                                        ),
@@ -879,7 +879,7 @@
                for ( $i = 0; $i <= $val['count']; ++$i ) {
                        $links[] = wfMessage(
                                        'cite_references_link_many_format',
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                $this->refKey( $key, 
$val['key'] . "-$i" )
                                        ),
                                        
$this->referencesFormatEntryNumericBacklinkLabel( $val['number'], $i, 
$val['count'] ),
@@ -890,7 +890,7 @@
                $list = $this->listToText( $links );
 
                return wfMessage( 'cite_references_link_many',
-                               Sanitizer::safeEncodeAttribute(
+                               $this->normalizeKey(
                                        self::getReferencesKey( $key . "-" . 
$val['key'] )
                                ),
                                $list,
@@ -1049,10 +1049,10 @@
                        $this->mParser->recursiveTagParse(
                                wfMessage(
                                        'cite_reference_link',
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                $this->refKey( $key, $count )
                                        ),
-                                       Sanitizer::safeEncodeAttribute(
+                                       $this->normalizeKey(
                                                self::getReferencesKey( $key . 
$subkey )
                                        ),
                                        Sanitizer::safeEncodeAttribute(
@@ -1064,6 +1064,19 @@
        }
 
        /**
+        * Normalizes and sanitizes a reference key
+        *
+        * @param string $key
+        * @return string
+        */
+       private function normalizeKey( $key ) {
+               $key = Sanitizer::escapeIdForAttribute( $key );
+               $key = Sanitizer::safeEncodeAttribute( $key );
+
+               return $key;
+       }
+
+       /**
         * This does approximately the same thing as
         * Language::listToText() but due to this being used for a
         * slightly different purpose (people might not want , as the
diff --git a/tests/parser/citeParserTests.txt b/tests/parser/citeParserTests.txt
index a5ad0ee..c3f97a7 100644
--- a/tests/parser/citeParserTests.txt
+++ b/tests/parser/citeParserTests.txt
@@ -608,6 +608,21 @@
 
 !! end
 
+!! test
+T29694 - [] in reference names in HTML5 fragment mode
+!! config
+wgFragmentMode=[ 'html5' ]
+!! wikitext
+<ref name="[#foo] {bar} <baz>">[bar]</ref>
+!! html
+<sup id="cite_ref-&#91;#foo&#93;_&#123;bar&#125;_&lt;baz_1-0" 
class="reference"><a 
href="#cite_note-[#foo]_{bar}_&lt;baz-1">&#91;1&#93;</a></sup><div 
class="mw-references-wrap"><ol class="references">
+<li id="cite_note-&#91;#foo&#93;_&#123;bar&#125;_&lt;baz-1"><span 
class="mw-cite-backlink"><a 
href="#cite_ref-[#foo]_{bar}_&lt;baz_1-0">↑</a></span> <span 
class="reference-text">"&gt;[bar]</span>
+</li>
+</ol></div>
+
+!! end
+
+
 #### ----------------------------------------------------------------
 #### Parsoid-only testing of Parsoid's impl of <ref> and <references>
 #### tags. Parsoid's output for these tags differs from that of the

-- 
To view, visit https://gerrit.wikimedia.org/r/390356
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Iec3439f76ecc2a3543b30b35f8735c92b0cfb711
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Cite
Gerrit-Branch: master
Gerrit-Owner: MaxSem <maxsem.w...@gmail.com>
Gerrit-Reviewer: C. Scott Ananian <canan...@wikimedia.org>
Gerrit-Reviewer: Jackmcbarn <jackmcb...@gmail.com>
Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org>
Gerrit-Reviewer: MaxSem <maxsem.w...@gmail.com>
Gerrit-Reviewer: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to