Subramanya Sastry has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/325341

Change subject: WIP: T151277: Quick first pass to support [[Media:Foo.bar|..]]
......................................................................

WIP: T151277: Quick first pass to support [[Media:Foo.bar|..]]

* TODO: Verify for sanity, code duplication
* Fix wt2wt
* Update tests

Change-Id: I656de2fc7882cd53f25478d1698f40bb05bb54fd
---
M lib/html2wt/LinkHandler.js
M lib/wt2html/tt/LinkHandler.js
M tests/parserTests-blacklist.js
3 files changed, 113 insertions(+), 24 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/41/325341/1

diff --git a/lib/html2wt/LinkHandler.js b/lib/html2wt/LinkHandler.js
index 7ad924e..8cca5a4 100644
--- a/lib/html2wt/LinkHandler.js
+++ b/lib/html2wt/LinkHandler.js
@@ -95,7 +95,7 @@
                // Parsoid only emits and recognizes ExtLink, WikiLink, and 
PageProp rel values.
                // Everything else defaults to ExtLink during serialization 
(unless it is
                // serializable to a wikilink)
-               var typeMatch = 
rel.match(/\b(mw:(?:WikiLink|ExtLink|PageProp)[^\s]*)\b/);
+               var typeMatch = 
rel.match(/\b(mw:(?:WikiLink|ExtLink|Media|PageProp)[^\s]*)\b/);
                if (typeMatch) {
                        rtData.type = typeMatch[1];
                        // Strip link subtype info
@@ -648,7 +648,7 @@
                }
                if (linkType !== null && linkData.target.value !== null) {
                        // We have a type and target info
-                       if (/^mw:WikiLink$/.test(linkType) ||
+                       if (/^mw:WikiLink|mw:Media$/.test(linkType) ||
                                        
Util.solTransparentLinkRegexp.test(linkType)) {
                                // [[..]] links: normal, category, redirect, or 
lang links
                                // (except images)
diff --git a/lib/wt2html/tt/LinkHandler.js b/lib/wt2html/tt/LinkHandler.js
index d5ce28c..1bcfbe7 100644
--- a/lib/wt2html/tt/LinkHandler.js
+++ b/lib/wt2html/tt/LinkHandler.js
@@ -280,6 +280,8 @@
                        if (title.getNamespace().isFile()) {
                                // Render as a file.
                                return this.renderFile.bind(this);
+                       } else if (title.getNamespace().isMedia()) {
+                               return this.renderMedia.bind(this);
                        } else if (title.getNamespace().isCategory()) {
                                // Render as a category membership.
                                return this.renderCategory.bind(this);
@@ -1511,6 +1513,81 @@
        ).nodify(this.handleImageInfo.bind(this, cb, token, title, opts, 
optSources));
 };
 
+WikiLinkHandler.prototype.linkToMedia = function(cb, token, title,  err, data) 
{
+       var image, info;
+       var rdfaType;
+       var dataMW = token.getAttribute("data-mw");
+       var dataMWObj = null;
+
+       if (!err && data) {
+               if (data.batchResponse !== undefined) {
+                       info = data.batchResponse;
+               } else {
+                       var ns = data.imgns;
+                       image = data.pages[ns + ':' + title.getKey()];
+                       if (image && image.imageinfo && image.imageinfo[0]) {
+                               info = image.imageinfo[0];
+                       } else {
+                               info = false;
+                       }
+               }
+       }
+
+       if (!info) {
+               // Use sane defaults.
+               info = {
+                       url: './Special:FilePath/' + (title ? 
Util.sanitizeTitleURI(title.getKey()) : ''),
+               };
+
+               // Add mw:Error to the RDFa type.
+               // Prepend since rdfaType is updated with /<format> further 
down.
+               rdfaType = "mw:Error " + rdfaType;
+
+               // Add error info to data-mw
+               dataMWObj = dataMW ? JSON.parse(dataMW) : {};
+               var errs = dataMWObj.errors;
+               if (!errs) {
+                       errs = [];
+                       dataMWObj.errors = errs;
+               }
+
+               // Set appropriate error info
+               if (title && (err || !data)) {
+                       errs.push({"key": "api-error", "message": err || "Empty 
API info"});
+               } else {
+                       errs.push({"key": "missing-image", "message": "This 
image does not exist." });
+               }
+       }
+
+       // Create the <a> tag with right attributes
+       var link = new TagTk('a', [], Util.clone(token.dataAttribs));
+       link.addAttribute('href', getPath(info));
+       link.addAttribute('rel', 'mw:Media');
+       if (rdfaType) {
+               link.addAttribute("typeof", rdfaType);
+       }
+       var type = token.getAttribute("typeof");
+       if (type) {
+               link.addSpaceSeparatedAttribute("typeof", type);
+       }
+
+       // Seta data-mw if applicable
+       if (dataMWObj) {
+               link.addAttribute("data-mw", JSON.stringify(dataMWObj))
+       } else if (dataMW) {
+               link.addAttribute("data-mw", dataMW);
+       }
+
+       var content = token.getAttribute('mw:maybeContent') || 
token.getAttribute('href');
+       cb({ tokens: [ link, content, new EndTagTk('a') ] });
+};
+
+WikiLinkHandler.prototype.renderMedia = function(token, frame, cb, target) {
+       var title = target.title;
+       cb({ async: true });
+       this.manager.env.batcher.imageinfo( title.getKey(), { height: null, 
width: null })
+               .nodify(this.linkToMedia.bind(this, cb, token, title));
+};
 
 /**
  * @class
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 05f6075..9726f3c 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -148,10 +148,10 @@
 add("wt2html", "Short headings with trailing space should match behavior of 
Parser::doHeadings (bug 19910)", "<p data-parsoid='{\"dsr\":[0,100,0,0]}'>=== 
\nThe line above must have a trailing space!\n=== <!--\n--> <!-- -->\nBut just 
in case it doesn't...</p>");
 add("wt2html", "Header with space, plus and underscore as entity", "<p 
data-parsoid='{\"dsr\":[0,34,0,0]}'>Id should not contain + for 
spaces</p>\n\n<h2 id=\"Space_between_Text\" 
data-parsoid='{\"dsr\":[36,60,2,2]}'> Space between Text </h2>\n<p 
data-parsoid='{\"dsr\":[61,70,0,0]}'>section 1</p>\n\n<h2 
id=\"Space-Entity_between_Text\" data-parsoid='{\"dsr\":[72,111,2,2]}'> 
Space-Entity<span typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#32;\",\"srcContent\":\" 
\",\"dsr\":[87,92,null,null]}'> </span>between<span typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#32;\",\"srcContent\":\" 
\",\"dsr\":[99,104,null,null]}'> </span>Text </h2>\n<p 
data-parsoid='{\"dsr\":[112,121,0,0]}'>section 2</p>\n\n<h2 
id=\"Plus.2Bbetween.2BText\" data-parsoid='{\"dsr\":[123,146,2,2]}'> 
Plus+between+Text </h2>\n<p data-parsoid='{\"dsr\":[147,156,0,0]}'>section 
3</p>\n\n<h2 id=\"Plus-Entity.2Bbetween.2BText\" 
data-parsoid='{\"dsr\":[158,196,2,2]}'> Plus-Entity<span typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#43;\",\"srcContent\":\"+\",\"dsr\":[172,177,null,null]}'>+</span>between<span
 typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#43;\",\"srcContent\":\"+\",\"dsr\":[184,189,null,null]}'>+</span>Text
 </h2>\n<p data-parsoid='{\"dsr\":[197,206,0,0]}'>section 4</p>\n\n<h2 
id=\"Underscore_between_Text\" data-parsoid='{\"dsr\":[208,237,2,2]}'> 
Underscore_between_Text </h2>\n<p 
data-parsoid='{\"dsr\":[238,247,0,0]}'>section 5</p>\n\n<h2 
id=\"Underscore-Entity_between_Text\" data-parsoid='{\"dsr\":[249,293,2,2]}'> 
Underscore-Entity<span typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#95;\",\"srcContent\":\"_\",\"dsr\":[269,274,null,null]}'>_</span>between<span
 typeof=\"mw:Entity\" 
data-parsoid='{\"src\":\"&amp;#95;\",\"srcContent\":\"_\",\"dsr\":[281,286,null,null]}'>_</span>Text
 </h2>\n<p data-parsoid='{\"dsr\":[294,303,0,0]}'>section 6</p>\n\n<p 
data-parsoid='{\"dsr\":[305,501,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Main_Page#Space_between_Text\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page#Space_between_Text\"},\"sa\":{\"href\":\"#Space
 between Text\"},\"dsr\":[305,328,2,2]}'>#Space between Text</a>\n<a 
rel=\"mw:WikiLink\" href=\"./Main_Page#Space-Entity_between_Text\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page#Space-Entity_between_Text\"},\"sa\":{\"href\":\"#Space-Entity&amp;#32;between&amp;#32;Text\"},\"dsr\":[329,367,2,2]}'>#Space-Entity
 between Text</a>\n<a rel=\"mw:WikiLink\" 
href=\"./Main_Page#Plus+between+Text\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page#Plus+between+Text\"},\"sa\":{\"href\":\"#Plus+between+Text\"},\"dsr\":[368,390,2,2]}'>#Plus+between+Text</a>\n<a
 rel=\"mw:WikiLink\" href=\"./Main_Page#Plus-Entity+between+Text\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page#Plus-Entity+between+Text\"},\"sa\":{\"href\":\"#Plus-Entity&amp;#43;between&amp;#43;Text\"},\"dsr\":[391,428,2,2]}'>#Plus-Entity+between+Text</a>\n<a
 rel=\"mw:WikiLink\" href=\"./Main_Page#Underscore_between_Text\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page#Underscore_between_Text\"},\"sa\":{\"href\":\"#Underscore_between_Text\"},\"dsr\":[429,457,2,2]}'>#Underscore_between_Text</a>\n<a
 rel=\"mw:WikiLink\" href=\"./Main_Page#Underscore-Entity_between_Text\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page#Underscore-Entity_between_Text\"},\"sa\":{\"href\":\"#Underscore-Entity&amp;#95;between&amp;#95;Text\"},\"dsr\":[458,501,2,2]}'>#Underscore-Entity_between_Text</a></p>");
 add("wt2html", "Single-line or multiline-comments can follow headings", "<h2 
id=\"foo\" data-parsoid='{\"dsr\":[0,7,2,2]}'>foo</h2><!---->\n<h2 id=\"bar\" 
data-parsoid='{\"dsr\":[15,22,2,2]}'>bar</h2><!--c1-->\n<h2 id=\"baz\" 
data-parsoid='{\"dsr\":[32,39,2,2]}'>baz</h2><!--\nc2\nc3-->");
-add("wt2html", "Media link", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'><a 
rel=\"mw:WikiLink\" href=\"./Media:Foobar.jpg\" title=\"Media:Foobar.jpg\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Media:Foobar.jpg\"},\"sa\":{\"href\":\"Media:Foobar.jpg\"},\"dsr\":[0,20,2,2]}'>Media:Foobar.jpg</a></p>");
-add("wt2html", "Media link with text", "<p 
data-parsoid='{\"dsr\":[0,43,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Media:Foobar.jpg\" title=\"Media:Foobar.jpg\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Media:Foobar.jpg\"},\"sa\":{\"href\":\"Media:Foobar.jpg\"},\"dsr\":[0,43,19,2]}'>A
 neat file to look at</a></p>");
-add("wt2html", "Media link with nasty text", "<p 
data-parsoid='{\"dsr\":[0,106,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Media:Foobar.jpg\" title=\"Media:Foobar.jpg\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Media:Foobar.jpg\"},\"sa\":{\"href\":\"Media:Foobar.jpg\"},\"dsr\":[0,106,19,2]}'>Safe
 Link<div style=\"display:none\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[28,104,24,6]}'>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div></a></p>");
-add("wt2html", "Media link to nonexistent file (bug 1702)", "<p 
data-parsoid='{\"dsr\":[0,21,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Media:No_such.jpg\" title=\"Media:No such.jpg\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Media:No_such.jpg\"},\"sa\":{\"href\":\"Media:No
 such.jpg\"},\"dsr\":[0,21,2,2]}'>Media:No such.jpg</a></p>");
+add("wt2html", "Media link", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'><a 
href=\"//example.com/images/3/3a/Foobar.jpg\" rel=\"mw:Media\" 
data-parsoid='{\"src\":\"[[Media:Foobar.jpg]]\",\"dsr\":[0,20,null,null]}'>Media:Foobar.jpg</a></p>");
+add("wt2html", "Media link with text", "<p 
data-parsoid='{\"dsr\":[0,43,0,0]}'><a 
href=\"//example.com/images/3/3a/Foobar.jpg\" rel=\"mw:Media\" 
data-parsoid='{\"src\":\"[[Media:Foobar.jpg|A neat file to look 
at]]\",\"dsr\":[0,43,null,null]}'>A neat file to look at</a></p>");
+add("wt2html", "Media link with nasty text", "<p 
data-parsoid='{\"dsr\":[0,106,0,0]}'><a 
href=\"//example.com/images/3/3a/Foobar.jpg\" rel=\"mw:Media\" 
data-parsoid='{\"src\":\"[[Media:Foobar.jpg|Safe Link&lt;div 
style=display:none>\\\" onmouseover=\\\"alert(document.cookie)\\\" 
onfoo=\\\"&lt;/div>]]\",\"autoInsertedEnd\":true,\"dsr\":[0,106,null,0]}'>Safe 
Link</a></p><div style=\"display:none\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[28,104,24,6]}'><a 
href=\"//example.com/images/3/3a/Foobar.jpg\" rel=\"mw:Media\" 
data-parsoid='{\"src\":\"[[Media:Foobar.jpg|Safe Link&lt;div 
style=display:none>\\\" onmouseover=\\\"alert(document.cookie)\\\" 
onfoo=\\\"&lt;/div>]]\",\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[52,98,0,0]}'>\"
 onmouseover=\"alert(document.cookie)\" onfoo=\"</a></div>");
+add("wt2html", "Media link to nonexistent file (bug 1702)", "<p 
data-parsoid='{\"dsr\":[0,21,0,0]}'><a href=\"./Special:FilePath/No_such.jpg\" 
rel=\"mw:Media\" typeof=\"mw:Error undefined\" 
data-parsoid='{\"dsr\":[0,21,null,null]}' 
data-mw='{\"errors\":[{\"key\":\"missing-image\",\"message\":\"This image does 
not exist.\"}]}'>Media:No such.jpg</a></p>");
 add("wt2html", "(bug 19451) Links should refer to the normalized form.", "<p 
data-parsoid='{\"dsr\":[0,64,0,0]}'><a rel=\"mw:WikiLink\" href=\"./אַ\" 
title=\"אַ\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"&amp;#xFB2E;\"},\"dsr\":[0,12,2,2]}'>אַ</a>\n<a
 rel=\"mw:WikiLink\" href=\"./אַ\" title=\"אַ\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"&amp;#x5d0;&amp;#x5b7;\"},\"dsr\":[13,31,2,2]}'>אַ</a>\n<a
 rel=\"mw:WikiLink\" href=\"./אַ\" title=\"אַ\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"&amp;#x5d0;ַ\"},\"dsr\":[32,44,2,2]}'>אַ</a>\n<a
 rel=\"mw:WikiLink\" href=\"./אַ\" title=\"אַ\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"א&amp;#x5b7;\"},\"dsr\":[45,57,2,2]}'>אַ</a>\n<a
 rel=\"mw:WikiLink\" href=\"./אַ\" title=\"אַ\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"אַ\"},\"dsr\":[58,64,2,2]}'>אַ</a></p>");
 add("wt2html", "Bug 2304: HTML attribute safety (unsafe breakout parameter; 
2309)", "<div style=\"float: right;  >alert(document.cookie)\" about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"stx\":\"html\",\"a\":{\"style\":\"float: right;  
>alert(document.cookie)\"},\"sa\":{\"style\":\"float: right; 
{{{1}}}\"},\"dsr\":[0,55,null,null],\"pi\":[[{\"k\":\"1\"}]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"div 
style\",\"href\":\"./Template:Div_style\"},\"params\":{\"1\":{\"wt\":\"\\\">&lt;script>alert(document.cookie)&lt;/script>\"}},\"i\":0}}]}'>Magic
 div</div>");
 add("wt2html", "Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 
2309)", "<div style=\"float: right;   >alert(document.cookie)\" about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"stx\":\"html\",\"a\":{\"style\":\"float: right;   
>alert(document.cookie)\"},\"sa\":{\"style\":\"float: right; 
{{{1}}}\"},\"dsr\":[0,56,null,null],\"pi\":[[{\"k\":\"1\"}]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"div 
style\",\"href\":\"./Template:Div_style\"},\"params\":{\"1\":{\"wt\":\"\\\" 
>&lt;script>alert(document.cookie)&lt;/script>\"}},\"i\":0}}]}'>Magic 
div</div>");
@@ -326,7 +326,10 @@
 add("wt2wt", "HTML multiple attributes correction", "<p 
class=\"awesome\">Awesome!</p>");
 add("wt2wt", "Table multiple attributes correction", "{|\n! class=\"awesome\" 
+ | status\n|}");
 add("wt2wt", "DIV IN UPPERCASE", "<DIV id=\"x\">HTML ROCKS</DIV>");
-add("wt2wt", "Media link with nasty text", "[[Media:Foobar.jpg|Safe Link]]<div 
style=\"display:none\">[[Media:Foobar.jpg|\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"]]</div>\n");
+add("wt2wt", "Media link", 
"[[//example.com/images/3/3a/Foobar.jpg|Media:Foobar.jpg]]\n");
+add("wt2wt", "Media link with text", "[[//example.com/images/3/3a/Foobar.jpg|A 
neat file to look at]]\n");
+add("wt2wt", "Media link with nasty text", 
"[[//example.com/images/3/3a/Foobar.jpg|Safe Link]]<div 
style=\"display:none\">[[//example.com/images/3/3a/Foobar.jpg|\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"]]</div>");
+add("wt2wt", "Media link to nonexistent file (bug 1702)", 
"[[Special:FilePath/No such.jpg|Media:No such.jpg]]\n");
 add("wt2wt", "Empty attribute crash test single-quotes (bug 2067)", "<font 
color=\"\">foo</font>\n");
 add("wt2wt", "Attribute test: unquoted but illegal value (hash)", "<font 
color=\"#x\">foo</font>\n");
 add("wt2wt", "Bug 2095: link with pipe and three closing brackets, version 2", 
"[[Main Page|<nowiki>[http://example.com/]</nowiki>]]\n");
@@ -1796,23 +1799,32 @@
 add("selser", "DIV IN UPPERCASE [2]", "qcqx475zv4c2fbt9<DIV ID=\"x\">HTML 
ROCKS</DIV>");
 add("selser", "DIV IN UPPERCASE [[2]]", "<DIV ID=\"x\">0lhea1vi5vfs9k9HTML 
ROCKS</DIV>");
 add("selser", "DIV IN UPPERCASE [[4]]", "<DIV 
ID=\"x\">ae3oduwc950tqpvi</DIV>");
-add("selser", "Media link with nasty text 5", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>\n");
-add("selser", "Media link with nasty text [[[3]],[2],0]", 
"[[Media:Foobar.jpg|<nowiki/>]]<div 
style=display:none>bz3y7tm45658w7b9[[Media:Foobar.jpg|Safe Link<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]</div>\n");
-add("selser", "Media link with nasty text [2,2,1]", 
"plljquqi07ap2e29\n\n[[Media:Foobar.jpg|Safe Link<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>]]\n\nbn7r3inxy74x6r<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>\n");
-add("selser", "Media link with nasty text [[[2]],[4],0]", 
"[[Media:Foobar.jpg|5mz4xg0i1hkkpgb9Safe Link]]<div 
style=display:none>13z0hw6wmt18xgvi</div>\n");
-add("selser", "Media link with nasty text [[[4]],2,0]", 
"[[Media:Foobar.jpg|bgsu9313fgu2qpvi]]\n\ndx2sgczb8a6y9zfr<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>\n");
-add("selser", "Media link with nasty text [0,2,0]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]\n\n58bje6tosbvjkyb9<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>\n");
-add("selser", "Media link with nasty text [0,[1],2]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]<div style=display:none>[[Media:Foobar.jpg|\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"]]</div>8jhjz28qyfkwqaor\n");
-add("selser", "Media link with nasty text [4,0,0]", "ztlm95j7w05jc3di<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>\n");
-add("selser", "Media link with nasty text [1,0,3]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
-add("selser", "Media link with nasty text [[[3]],[[2]],1]", 
"[[Media:Foobar.jpg|<nowiki/>]]<div 
style=display:none>[[Media:Foobar.jpg|4l6szv69ugix80k9\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"]]</div>\n");
-add("selser", "Media link with nasty text [[2],[3],0]", 
"3buefjw641n8w7b9[[Media:Foobar.jpg|Safe Link<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>]]<div 
style=\"display:none\"></div>\n");
-add("selser", "Media link with nasty text [3,0,0]", "<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>\n");
-add("selser", "Media link with nasty text [2,1,1]", 
"q6qorphnrdb49529\n\n[[Media:Foobar.jpg|Safe Link<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>]]<div 
style=\"display:none\" data-foobar=\"boskkwf1mpbep14i\">[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]</div>\n");
-add("selser", "Media link with nasty text [1,4,0]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]\n\n69bbicqzxqb2zkt9\n");
-add("selser", "Media link with nasty text [[[4]],[[4]],0]", 
"[[Media:Foobar.jpg|5ty11kutwpl23xr]]<div 
style=display:none>[[Media:Foobar.jpg|i4tzw9exo8byb9]]</div>\n");
-add("selser", "Media link with nasty text [0,4,0]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]\n\n58e72dp25x4aq0k9\n");
-add("selser", "Media link with nasty text [[3],2,3]", "\nbua27u64k0sk0529<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link [[2]]", "fljvbxy1nwdygb9[[Media:Foobar.jpg]]");
+add("selser", "Media link [2]", "xw7au4wq1is02j4i\n\n[[Media:Foobar.jpg]]");
+add("selser", "Media link [1]", "[[Media:Foobar.jpg]]");
+add("selser", "Media link with text [2]", 
"ub6f2o96wda8xgvi\n\n[[Media:Foobar.jpg|A neat file to look at]]");
+add("selser", "Media link with text [1]", "[[Media:Foobar.jpg|A neat file to 
look at]]");
+add("selser", "Media link with text [[2]]", 
"cbunsa1x7tz6ko6r[[Media:Foobar.jpg|A neat file to look at]]");
+add("selser", "Media link with nasty text 5", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [[[3]],[2]]", 
"[[//example.com/images/3/3a/Foobar.jpg|<nowiki/>]]<div 
style=display:none>bz3y7tm45658w7b9\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>");
+add("selser", "Media link with nasty text [2,2]", 
"plljquqi07ap2e29\n\n[[Media:Foobar.jpg|Safe Link<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>]]\n\nbn7r3inxy74x6r<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [[[2]],[4]]", 
"[[//example.com/images/3/3a/Foobar.jpg|5mz4xg0i1hkkpgb9Safe Link]]<div 
style=display:none>13z0hw6wmt18xgvi</div>");
+add("selser", "Media link with nasty text [[[4]],2]", 
"[[//example.com/images/3/3a/Foobar.jpg|bgsu9313fgu2qpvi]]\n\ndx2sgczb8a6y9zfr<div
 style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [0,2]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]\n\n58bje6tosbvjkyb9<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [0,[1]]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]<div 
style=display:none>[[//example.com/images/3/3a/Foobar.jpg|\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"]]</div>");
+add("selser", "Media link with nasty text [4,0]", "ztlm95j7w05jc3di<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [1,0]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [[[3]],[[2]]]", 
"[[//example.com/images/3/3a/Foobar.jpg|<nowiki/>]]<div 
style=display:none>[[//example.com/images/3/3a/Foobar.jpg|4l6szv69ugix80k9\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"]]</div>");
+add("selser", "Media link with nasty text [[2],[3]]", 
"3buefjw641n8w7b9[[Media:Foobar.jpg|Safe Link<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>]]<div 
style=\"display:none\"></div>");
+add("selser", "Media link with nasty text [3,0]", "<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [2,1]", 
"q6qorphnrdb49529\n\n[[Media:Foobar.jpg|Safe Link<div style=display:none>\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>]]<div 
style=\"display:none\" data-foobar=\"boskkwf1mpbep14i\">\" 
onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link with nasty text [1,4]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]\n\n69bbicqzxqb2zkt9\n");
+add("selser", "Media link with nasty text [[[4]],[[4]]]", 
"[[//example.com/images/3/3a/Foobar.jpg|5ty11kutwpl23xr]]<div 
style=display:none>[[//example.com/images/3/3a/Foobar.jpg|i4tzw9exo8byb9]]</div>");
+add("selser", "Media link with nasty text [0,4]", "[[Media:Foobar.jpg|Safe 
Link<div style=display:none>\" onmouseover=\"alert(document.cookie)\" 
onfoo=\"</div>]]\n\n58e72dp25x4aq0k9\n");
+add("selser", "Media link with nasty text [[3],2]", "\nbua27u64k0sk0529<div 
style=display:none>\" onmouseover=\"alert(document.cookie)\" onfoo=\"</div>");
+add("selser", "Media link to nonexistent file (bug 1702) [1]", "[[Media:No 
such.jpg]]");
+add("selser", "Media link to nonexistent file (bug 1702) [2]", 
"tirp85ethkm4pldi\n\n[[Media:No such.jpg]]");
+add("selser", "Media link to nonexistent file (bug 1702) [[2]]", 
"fqvarphzz2d18aor[[Media:No such.jpg]]");
 add("selser", "Empty attribute crash test single-quotes (bug 2067) [1]", 
"<font color=''>foo</font>");
 add("selser", "Empty attribute crash test single-quotes (bug 2067) [[[2]]]", 
"<font color=''>zd72gzn6ggjsjorfoo</font>");
 add("selser", "Empty attribute crash test single-quotes (bug 2067) [2]", 
"5kxneyilny2gwrk9\n\n<font color=''>foo</font>");

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I656de2fc7882cd53f25478d1698f40bb05bb54fd
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>

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

Reply via email to