Page MenuHomePhabricator

"TypeError: range is null" with 2017 editor
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

What happens?:

Uncaught TypeError: range is null
    getCaretPosition https://test.wikipedia.org/w/load.php?lang=en&modules=ext.visualEditor.articleTarget%2Cbase%2Ccore%2CdesktopArticleTarget%2CdesktopTarget%2Cdiffing%2CeditCheck%2Cicons%2Clanguage%2Cmediawiki%2Cmwalienextension%2Cmwcore%2Cmwextensions%2Cmwformatting%2Cmwgallery%2Cmwimage%2Cmwlanguage%2Cmwlink%2Cmwmeta%2Cmwsave%2Cmwsignature%2Cmwtransclusion%2Cmwwikitext%2Csanitize%2Cswitching%2Cwelcome%7Cext.visualEditor.core.desktop%2Cutils%7Cext.visualEditor.mwextensions.desktop%7Cext.visualEditor.mwimage.core&skin=vector&version=edjc8:53343
    textSelection index.php:403
    wikiEditor https://test.wikipedia.org/w/load.php?lang=en&modules=ext.wikiEditor&skin=vector&version=13zx4:18
    init https://test.wikipedia.org/w/index.php?title=MediaWiki:RefToolbar.js&action=raw&ctype=text/javascript:128
    <anonymous> https://test.wikipedia.org/w/index.php?title=MediaWiki:RefToolbar.js&action=raw&ctype=text/javascript:233

What should have happened instead?:
No console error.

Other information (browser name/version, screenshots, etc.):
Intermittent. Clearing cache and site data seems to increase the chance for the error.

range.end in getCaretPosition() in ve.ui.MWWikitextSurface.js appears to be unsafely referenced even though range.start isn't three lines before.

getCaretPosition: function ( options ) {
	var range = surface.getModel().getSelection().getCoveringRange(),
		surfaceModel = surface.getModel(),
		caretPos = range ? surfaceModel.getSourceOffsetFromOffset( range.start ) : 0;

	return options.startAndEnd ?
		[ caretPos, surfaceModel.getSourceOffsetFromOffset( range.end ) ] :
		caretPos;
}

Event Timeline

Change 909690 had a related patch set uploaded (by DLynch; author: DLynch):

[mediawiki/extensions/VisualEditor@master] textSelection compat layer getCaretPosition could error if no selection

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

DLynch added a project: Editing-team.
DLynch subscribed.

I couldn't actually reproduce the error, but it definitely looks like it's a load-timing-dependent one where the gadget initialization manages to go off before the surface is created enough to have been focused. As such the patch just adds a check on the range's existence to generating the end position as well.

Change 909690 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] textSelection compat layer getCaretPosition could error if no selection

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

matmarex edited projects, added Skipped QA; removed Patch-For-Review.