Arlolra has uploaded a new change for review.

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

Change subject: Be careful about using tsr in tokens/x-mediawiki phase
......................................................................

Be careful about using tsr in tokens/x-mediawiki phase

 * The tsr info is only stripped from tokens once emitted from the
   pipeline.  Make explicit checks that we aren't inTemplate.

 * This problem can be seen in the origTxt of the link in the test
   called "Parsoid: pipe in transclusion parameter".

Change-Id: I0bf5c259c926bbb60ac2524d510f086a92ce7311
---
M lib/dom.t.TableFixups.js
M lib/ext.core.LinkHandler.js
M lib/ext.core.NoIncludeOnly.js
M lib/ext.core.Sanitizer.js
4 files changed, 13 insertions(+), 13 deletions(-)


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

diff --git a/lib/dom.t.TableFixups.js b/lib/dom.t.TableFixups.js
index 55dc996..e83769a 100644
--- a/lib/dom.t.TableFixups.js
+++ b/lib/dom.t.TableFixups.js
@@ -33,7 +33,7 @@
                env: env,
                addTransform: function() {},
        };
-       this.sanitizer = new Sanitizer(fakeManager);
+       this.sanitizer = new Sanitizer(fakeManager, {});
 }
 
 /**
diff --git a/lib/ext.core.LinkHandler.js b/lib/ext.core.LinkHandler.js
index deadadd..73b6395 100644
--- a/lib/ext.core.LinkHandler.js
+++ b/lib/ext.core.LinkHandler.js
@@ -1445,6 +1445,7 @@
 };
 
 function ExternalLinkHandler(manager, options) {
+       this.options = options;
        this.manager = manager;
        this.manager.addTransform(this.onUrlLink.bind(this), 
"ExternalLinkHandler:onUrlLink", this.rank, 'tag', 'urllink');
        this.manager.addTransform(this.onExtLink.bind(this), 
"ExternalLinkHandler:onExtLink",
@@ -1498,7 +1499,6 @@
        var tagAttrs, builtTag;
        var env = this.manager.env;
        var href = Util.tokensToString(Util.lookup(token.attribs, 'href'));
-       var origTxt = token.getWTSource(env);
        var txt = href;
 
        if (SanitizerConstants.IDN_RE.test(txt)) {
@@ -1529,14 +1529,12 @@
                builtTag = new TagTk('a', tagAttrs, dataAttribs);
                dataAttribs.stx = 'url';
 
-               if (origTxt) {
-                       // origTxt will be null for content from templates
-                       //
+               if (!this.options.inTemplate) {
                        // Since we messed with the text of the link, we need
                        // to preserve the original in the RT data. Or else.
-                       builtTag.addNormalizedAttribute('href', txt, origTxt);
+                       builtTag.addNormalizedAttribute('href', txt, 
token.getWTSource(env));
                } else {
-                       builtTag.addAttribute('href', 
token.getAttribute('href'));
+                       builtTag.addAttribute('href', txt);
                }
 
                cb({
diff --git a/lib/ext.core.NoIncludeOnly.js b/lib/ext.core.NoIncludeOnly.js
index 2afe089..b323e6c 100644
--- a/lib/ext.core.NoIncludeOnly.js
+++ b/lib/ext.core.NoIncludeOnly.js
@@ -54,6 +54,7 @@
  * onlyinclude processing (which is a good idea anyway).
  */
 function OnlyInclude(manager, options) {
+       this.options = options;
        this.manager = manager;
        if (options.isInclude) {
                this.accum = [];
@@ -72,7 +73,8 @@
 
 OnlyInclude.prototype.onOnlyInclude = function(token, manager) {
        var tsr = (token.dataAttribs || {}).tsr;
-       var src = tsr[1] ? token.getWTSource(manager.env) : undefined;
+       var src = !this.options.inTemplate && Array.isArray(tsr) && tsr[1] ?
+               token.getWTSource(manager.env) : undefined;
        var attribs = [
                new KV('typeof', 'mw:Includes/OnlyInclude' + (token instanceof 
EndTagTk ? '/End' : '')),
        ];
diff --git a/lib/ext.core.Sanitizer.js b/lib/ext.core.Sanitizer.js
index 82ed097..f30c1eb 100644
--- a/lib/ext.core.Sanitizer.js
+++ b/lib/ext.core.Sanitizer.js
@@ -588,7 +588,8 @@
  * @constructor
  * @param {TokenTransformManager} manager The manager for this part of the 
pipeline.
  */
-function Sanitizer(manager) {
+function Sanitizer(manager, options) {
+       this.options = options;
        // FIXME: would be good to make the sanitizer independent of the manager
        // so that it can be used separately. See
        // https://phabricator.wikimedia.org/T54941
@@ -710,10 +711,9 @@
        ) { // unknown tag -- convert to plain text
                var origToken = token;
 
-               if (token.dataAttribs.tsr) {
-                       // TSR is only set on top-level content tokens, for 
which the page
-                       // source is available in the environment. Just get the 
original
-                       // token source, so that we can avoid whitespace 
differences.
+               if (!this.options.inTemplate && token.dataAttribs.tsr) {
+                       // Just get the original token source, so that we can 
avoid
+                       // whitespace differences.
                        token = token.getWTSource(this.manager.env);
                } else if (token.constructor !== EndTagTk) {
                        // Handle things without a TSR: For example template or 
extension

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0bf5c259c926bbb60ac2524d510f086a92ce7311
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <abrea...@wikimedia.org>

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

Reply via email to