jenkins-bot has submitted this change and it was merged.

Change subject: Trim while normalizing namespace for interwiki links
......................................................................


Trim while normalizing namespace for interwiki links

 * Fixes a lurking bug there (pointed out by marcoil). The normalized
   target may have changed length, so basing a substring of it off the
   initial prefix is error prone.

Bug: 68090
Change-Id: I3328de950d3473430ef6011b993230e60fe10404
---
M lib/ext.core.LinkHandler.js
M lib/wts.LinkHandler.js
M tests/parserTests.txt
3 files changed, 23 insertions(+), 4 deletions(-)

Approvals:
  Marcoil: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/ext.core.LinkHandler.js b/lib/ext.core.LinkHandler.js
index a0e1b33..01f9e38 100644
--- a/lib/ext.core.LinkHandler.js
+++ b/lib/ext.core.LinkHandler.js
@@ -80,7 +80,7 @@
        if ( hrefBits ) {
                var nsPrefix = hrefBits[1];
                info.prefix = nsPrefix;
-               var nnn = Util.normalizeNamespaceName( nsPrefix ),
+               var nnn = Util.normalizeNamespaceName( nsPrefix.trim() ),
                        interwikiInfo = env.conf.wiki.interwikiMap[nnn],
                        // check for interwiki / language links
                        ns = env.conf.wiki.namespaceIds[nnn];
@@ -88,10 +88,10 @@
                // also check for url to protect against [[constructor:foo]]
                if ( ns !== undefined ) {
                        // FIXME: percent-decode first, then entity-decode!
-                       info.title = new Title( Util.decodeURI(href.substr( 
nsPrefix.length + 1 )),
+                       info.title = new Title( Util.decodeURI( 
href.replace(/^[^:]+:/, '') ),
                                        ns, nsPrefix, env );
                } else if ( interwikiInfo && interwikiInfo.url ) {
-                       info.href = info.href.substr( nsPrefix.length + 1 );
+                       info.href = hrefBits[2];
                        // Interwiki or language link? If no language info, or 
if it starts
                        // with an explicit ':' (like [[:en:Foo]]), it's not a 
language link.
                        if ( info.fromColonEscapedText || 
(interwikiInfo.language === undefined && interwikiInfo.extralanglink === 
undefined) ) {
diff --git a/lib/wts.LinkHandler.js b/lib/wts.LinkHandler.js
index a5dffe5..f2f6484 100644
--- a/lib/wts.LinkHandler.js
+++ b/lib/wts.LinkHandler.js
@@ -284,7 +284,7 @@
                                                // Check if the old prefix 
mapped to the same URL as
                                                // the new one. Use the old one 
if that's the case.
                                                // Example: [[w:Foo]] vs. 
[[:en:Foo]]
-                                               
(env.conf.wiki.interwikiMap[oldPrefix[1].toLowerCase().replace(/^:/, '')] || 
{}).url ===
+                                               
(env.conf.wiki.interwikiMap[oldPrefix[1].toLowerCase().trim().replace(/^:/, 
'')] || {}).url ===
                                                
(env.conf.wiki.interwikiMap[interWikiMatch[0].toLowerCase().replace(/^:/, '')] 
|| {}).url
                                                ))
                                {
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index 4a3889d..d2cd088 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -6351,6 +6351,8 @@
 [[wikipedia:en:Foo]]
 
 [[:wikipedia:en:Foo]]
+
+[[  wikiPEdia :Foo]]
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" 
data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>en:Foo</a></p>
 
@@ -6363,6 +6365,8 @@
 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo"; 
data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
 
 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo"; 
data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"; 
data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":";
  wikiPEdia :Foo"},"isIW":true}'>  wikiPEdia :Foo</a></p>
 !! end
 
 !! test
@@ -6426,6 +6430,21 @@
 !! end
 
 !! test
+Interlanguage link variations
+!! wikitext
+Blah blah blah
+[[   es :Spanish]]
+[[ ZH :Chinese]]
+!! html/php
+<p>Blah blah blah
+</p>
+!! html/parsoid
+<p>Blah blah blah
+<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish" 
data-parsoid='{"stx":"simple","a":{"href":"//es.wikipedia.org/wiki/Spanish"},"sa":{"href":"
   es :Spanish"}}'/>
+<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese" 
data-parsoid='{"stx":"simple","a":{"href":"//zh.wikipedia.org/wiki/Chinese"},"sa":{"href":"
 ZH :Chinese"}}'/>
+!! end
+
+!! test
 Interlanguage link, with prefix links
 !! options
 language=ln

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I3328de950d3473430ef6011b993230e60fe10404
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>
Gerrit-Reviewer: Arlolra <[email protected]>
Gerrit-Reviewer: Cscott <[email protected]>
Gerrit-Reviewer: Marcoil <[email protected]>
Gerrit-Reviewer: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to