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\":\"&#32;\",\"srcContent\":\" \",\"dsr\":[87,92,null,null]}'> </span>between<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#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\":\"&#43;\",\"srcContent\":\"+\",\"dsr\":[172,177,null,null]}'>+</span>between<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#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\":\"&#95;\",\"srcContent\":\"_\",\"dsr\":[269,274,null,null]}'>_</span>between<span typeof=\"mw:Entity\" data-parsoid='{\"src\":\"&#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&#32;between&#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&#43;between&#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&#95;between&#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<div style=display:none>\\\" onmouseover=\\\"alert(document.cookie)\\\" onfoo=\\\"</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<div style=display:none>\\\" onmouseover=\\\"alert(document.cookie)\\\" onfoo=\\\"</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\":\"&#xFB2E;\"},\"dsr\":[0,12,2,2]}'>אַ</a>\n<a rel=\"mw:WikiLink\" href=\"./אַ\" title=\"אַ\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"&#x5d0;&#x5b7;\"},\"dsr\":[13,31,2,2]}'>אַ</a>\n<a rel=\"mw:WikiLink\" href=\"./אַ\" title=\"אַ\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"&#x5d0;ַ\"},\"dsr\":[32,44,2,2]}'>אַ</a>\n<a rel=\"mw:WikiLink\" href=\"./אַ\" title=\"אַ\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./אַ\"},\"sa\":{\"href\":\"א&#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\":\"\\\"><script>alert(document.cookie)</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\":\"\\\" ><script>alert(document.cookie)</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