jenkins-bot has submitted this change and it was merged.

Change subject: Prevent selser of zero-length DSR chunks.
......................................................................


Prevent selser of zero-length DSR chunks.

We use zero-length TSRs to mark synthetic chunks of the DOM, for example
the <meta typeof="mw:Category"> generated by '#REDIRECT [[Category:Foo]]'.
We want to make sure that we don't try to selser these chunks if they
are edited.

Makes one more selser test pass, more-or-less randomly.

Change-Id: I07cf0b5432ed188f8d33eda8178d205f48f36b82
---
M js/lib/mediawiki.WikitextSerializer.js
M js/tests/parserTests-blacklist.js
2 files changed, 6 insertions(+), 2 deletions(-)

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



diff --git a/js/lib/mediawiki.WikitextSerializer.js 
b/js/lib/mediawiki.WikitextSerializer.js
index c3f5892..e52fa01 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -2964,6 +2964,9 @@
                                // To serialize from source, we need 2 things 
of the node:
                                // -- it should not have a diff marker
                                // -- it should have valid, usable DSR
+                               // -- it should have a non-zero length DSR
+                               //    (this is used to prevent selser on 
synthetic content,
+                               //     like the category link for '#REDIRECT 
[[Category:Foo]]')
                                //
                                // SSS FIXME: Additionally, we can guard 
against buggy DSR with
                                // some sanity checks. We can test that non-sep 
src content
@@ -2973,7 +2976,9 @@
                                //
                                //  TO BE DONE
                                //
-                               if (dp && isValidDSR(dp.dsr) && 
!DU.hasCurrentDiffMark(node, this.env)) {
+                               if (dp && isValidDSR(dp.dsr) &&
+                                       (dp.dsr[1] > dp.dsr[0]) &&
+                                       !DU.hasCurrentDiffMark(node, this.env)) 
{
                                        // Strip leading/trailing separators 
*ONLY IF* the previous/following
                                        // node will go through non-selser 
serialization.
                                        var src = state.getOrigSrc(dp.dsr[0], 
dp.dsr[1]),
diff --git a/js/tests/parserTests-blacklist.js 
b/js/tests/parserTests-blacklist.js
index 9f8a41a..64c4db6 100644
--- a/js/tests/parserTests-blacklist.js
+++ b/js/tests/parserTests-blacklist.js
@@ -2894,7 +2894,6 @@
 add("selser", "Fuzz testing: Parser24 [3,4,1]");
 add("selser", "Fuzz testing: Parser24 [4,2,[0,0,0,1],4]");
 add("selser", "Fuzz testing: Parser24 [[0,[0,2]],2]");
-add("selser", "Fuzz testing: Parser24 [4,3,[0,0,0,3],[1]]");
 add("selser", "Fuzz testing: Parser24 [2,[2]]");
 add("selser", "Fuzz testing: Parser24 [[0,3],[0,0]]");
 add("selser", "Fuzz testing: Parser24 [4,[[0]]]");

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I07cf0b5432ed188f8d33eda8178d205f48f36b82
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Cscott <[email protected]>
Gerrit-Reviewer: Cscott <[email protected]>
Gerrit-Reviewer: GWicke <[email protected]>
Gerrit-Reviewer: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to