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

Change subject: mediawiki.Uri: Don't double-escape fragments
......................................................................


mediawiki.Uri: Don't double-escape fragments

Fragments were ingested already-escaped, then escaped again
when serializing. To prevent double-escaping, decode fragments
when ingesting them.

Bug: T183710
Change-Id: I19fc889bb7bde446476203bf6d6352dce8298256
---
M resources/src/mediawiki/mediawiki.Uri.js
M tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
2 files changed, 10 insertions(+), 3 deletions(-)

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



diff --git a/resources/src/mediawiki/mediawiki.Uri.js 
b/resources/src/mediawiki/mediawiki.Uri.js
index 450b415..7f12835 100644
--- a/resources/src/mediawiki/mediawiki.Uri.js
+++ b/resources/src/mediawiki/mediawiki.Uri.js
@@ -324,6 +324,11 @@
                                        } );
                                }
                                uri.query = q;
+
+                               // Decode uri.fragment, otherwise it gets 
double-encoded when serializing
+                               if ( uri.fragment !== undefined ) {
+                                       uri.fragment = Uri.decode( uri.fragment 
);
+                               }
                        },
 
                        /**
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js 
b/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
index 84b8f06..918c923 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
@@ -206,6 +206,8 @@
                uri = uriBase.clone();
                uri.fragment = 'frag';
                assert.equal( uri.toString(), 
'http://en.wiki.local/w/api.php#frag', 'add a fragment' );
+               uri.fragment = 'café';
+               assert.equal( uri.toString(), 
'http://en.wiki.local/w/api.php#caf%C3%A9', 'fragment is url-encoded' );
 
                uri = uriBase.clone();
                uri.host = 'fr.wiki.local';
@@ -391,7 +393,7 @@
        QUnit.test( 'Advanced URL', function ( assert ) {
                var uri, queryString, relativePath;
 
-               uri = new mw.Uri( 
'http://[email protected]:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top'
 );
+               uri = new mw.Uri( 
'http://[email protected]:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#caf%C3%A9'
 );
 
                assert.deepEqual(
                        {
@@ -412,7 +414,7 @@
                                port: '81',
                                path: '/dir/dir.2/index.htm',
                                query: { q1: '0', test1: null, test2: 'value 
(escaped)' },
-                               fragment: 'top'
+                               fragment: 'café'
                        },
                        'basic object properties'
                );
@@ -432,7 +434,7 @@
                relativePath = uri.getRelativePath();
                assert.ok( relativePath.indexOf( uri.path ) >= 0, 'path in 
relative path' );
                assert.ok( relativePath.indexOf( uri.getQueryString() ) >= 0, 
'query string in relative path' );
-               assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragment 
in relative path' );
+               assert.ok( relativePath.indexOf( mw.Uri.encode( uri.fragment ) 
) >= 0, 'escaped fragment in relative path' );
        } );
 
        QUnit.test( 'Parse a uri with an @ symbol in the path and query', 
function ( assert ) {

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I19fc889bb7bde446476203bf6d6352dce8298256
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Catrope <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: MaxSem <[email protected]>
Gerrit-Reviewer: Sbisson <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to