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