Page MenuHomePhabricator

"Cannot read property 'replace' of undefined" error on mobile version of Flow boards
Closed, DuplicatePublic

Description

Steps to reproduce

  1. Visit a mobile version of a Flow board, e.g. https://m.mediawiki.org/wiki/Topic:Vrcggzebxa6dd2j9?debug=true

Expected results

  • No errors are seen in the browser console

Actual results

  • The following error is seen in the browser console
Tidied
Uncaught TypeError: Cannot read property 'replace' of undefined
    at getNamespacePrefix 
    at Function.Title.js.Title.makeTitle 
    at Title.getTalkPage 
    at module.exports 
    at HTMLDocument.<anonymous> 
    at mightThrow 
    at process
Raw
Uncaught TypeError: Cannot read property 'replace' of undefined
    at getNamespacePrefix (load.php?debug=true&lang=en&modules=ext.centralNotice.choiceData%2CgeoIP%2CstartUp|ext.centralauth.ForeignApi|ext.centralauth.centralautologin.clearcookie|ext.echo.api%2Cinit|ext.eventLogging%2Cflow%2CnavigationTiming%2CwikimediaEvents|ext.flow.components%2Cdm%2Ctemplating%2Cui|ext.flow.jquery.conditionalScroll%2CfindWithParent|ext.flow.visualEditor.icons|ext.wikimediaEvents.loggedin|jquery%2Cmoment%2Coojs%2Coojs-router%2Coojs-ui%2Coojs-ui-core%2Coojs-ui-toolbars%2Coojs-ui-widgets%2Coojs-ui-windows%2Csite|jquery.client%2Ccookie%2Cthrottle-debounce|mediawiki.ForeignApi%2CString%2CTitle%2CUri%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Crouter%2Cstorage%2Ctemplate%2Cuser%2Cutil%2Cviewport|mediawiki.ForeignApi.core|mediawiki.libs.pluralruleparser|mediawiki.page.startup|mediawiki.page.watch.ajax|mediawiki.template.handlebars%2Cmustache|mobile.init%2Cstartup|mobile.messageBox.styles|mobile.ooui.icons|mobile.pagelist.styles|mobile.pagesummary.styles|mobile.placeholder.images|mobile.startup.images|oojs-ui-toolbars.icons|oojs-ui-widgets.icons|oojs-ui-windows.icons|oojs-ui.styles.icons-editing-advanced%2Cicons-editing-list%2Cicons-user|skins.minerva.icons.images.scripts|skins.minerva.icons.images.scripts.misc|skins.minerva.icons.page.issues.default.color|skins.minerva.icons.page.issues.medium.color|skins.minerva.icons.page.issues.uncolored|skins.minerva.options%2Cscripts|user.defaults&skin=minerva&version=9gj3r:3016)
    at Function.Title.js.Title.makeTitle (load.php?debug=true&lang=en&modules=ext.centralNotice.choiceData%2CgeoIP%2CstartUp|ext.centralauth.ForeignApi|ext.centralauth.centralautologin.clearcookie|ext.echo.api%2Cinit|ext.eventLogging%2Cflow%2CnavigationTiming%2CwikimediaEvents|ext.flow.components%2Cdm%2Ctemplating%2Cui|ext.flow.jquery.conditionalScroll%2CfindWithParent|ext.flow.visualEditor.icons|ext.wikimediaEvents.loggedin|jquery%2Cmoment%2Coojs%2Coojs-router%2Coojs-ui%2Coojs-ui-core%2Coojs-ui-toolbars%2Coojs-ui-widgets%2Coojs-ui-windows%2Csite|jquery.client%2Ccookie%2Cthrottle-debounce|mediawiki.ForeignApi%2CString%2CTitle%2CUri%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Crouter%2Cstorage%2Ctemplate%2Cuser%2Cutil%2Cviewport|mediawiki.ForeignApi.core|mediawiki.libs.pluralruleparser|mediawiki.page.startup|mediawiki.page.watch.ajax|mediawiki.template.handlebars%2Cmustache|mobile.init%2Cstartup|mobile.messageBox.styles|mobile.ooui.icons|mobile.pagelist.styles|mobile.pagesummary.styles|mobile.placeholder.images|mobile.startup.images|oojs-ui-toolbars.icons|oojs-ui-widgets.icons|oojs-ui-windows.icons|oojs-ui.styles.icons-editing-advanced%2Cicons-editing-list%2Cicons-user|skins.minerva.icons.images.scripts|skins.minerva.icons.images.scripts.misc|skins.minerva.icons.page.issues.default.color|skins.minerva.icons.page.issues.medium.color|skins.minerva.icons.page.issues.uncolored|skins.minerva.options%2Cscripts|user.defaults&skin=minerva&version=9gj3r:3364)
    at Title.getTalkPage (load.php?debug=true&lang=en&modules=ext.centralNotice.choiceData%2CgeoIP%2CstartUp|ext.centralauth.ForeignApi|ext.centralauth.centralautologin.clearcookie|ext.echo.api%2Cinit|ext.eventLogging%2Cflow%2CnavigationTiming%2CwikimediaEvents|ext.flow.components%2Cdm%2Ctemplating%2Cui|ext.flow.jquery.conditionalScroll%2CfindWithParent|ext.flow.visualEditor.icons|ext.wikimediaEvents.loggedin|jquery%2Cmoment%2Coojs%2Coojs-router%2Coojs-ui%2Coojs-ui-core%2Coojs-ui-toolbars%2Coojs-ui-widgets%2Coojs-ui-windows%2Csite|jquery.client%2Ccookie%2Cthrottle-debounce|mediawiki.ForeignApi%2CString%2CTitle%2CUri%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Crouter%2Cstorage%2Ctemplate%2Cuser%2Cutil%2Cviewport|mediawiki.ForeignApi.core|mediawiki.libs.pluralruleparser|mediawiki.page.startup|mediawiki.page.watch.ajax|mediawiki.template.handlebars%2Cmustache|mobile.init%2Cstartup|mobile.messageBox.styles|mobile.ooui.icons|mobile.pagelist.styles|mobile.pagesummary.styles|mobile.placeholder.images|mobile.startup.images|oojs-ui-toolbars.icons|oojs-ui-widgets.icons|oojs-ui-windows.icons|oojs-ui.styles.icons-editing-advanced%2Cicons-editing-list%2Cicons-user|skins.minerva.icons.images.scripts|skins.minerva.icons.images.scripts.misc|skins.minerva.icons.page.issues.default.color|skins.minerva.icons.page.issues.medium.color|skins.minerva.icons.page.issues.uncolored|skins.minerva.options%2Cscripts|user.defaults&skin=minerva&version=9gj3r:3826)
    at module.exports (load.php?debug=true&lang=en&modules=ext.centralNotice.choiceData%2CgeoIP%2CstartUp|ext.centralauth.ForeignApi|ext.centralauth.centralautologin.clearcookie|ext.echo.api%2Cinit|ext.eventLogging%2Cflow%2CnavigationTiming%2CwikimediaEvents|ext.flow.components%2Cdm%2Ctemplating%2Cui|ext.flow.jquery.conditionalScroll%2CfindWithParent|ext.flow.visualEditor.icons|ext.wikimediaEvents.loggedin|jquery%2Cmoment%2Coojs%2Coojs-router%2Coojs-ui%2Coojs-ui-core%2Coojs-ui-toolbars%2Coojs-ui-widgets%2Coojs-ui-windows%2Csite|jquery.client%2Ccookie%2Cthrottle-debounce|mediawiki.ForeignApi%2CString%2CTitle%2CUri%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Crouter%2Cstorage%2Ctemplate%2Cuser%2Cutil%2Cviewport|mediawiki.ForeignApi.core|mediawiki.libs.pluralruleparser|mediawiki.page.startup|mediawiki.page.watch.ajax|mediawiki.template.handlebars%2Cmustache|mobile.init%2Cstartup|mobile.messageBox.styles|mobile.ooui.icons|mobile.pagelist.styles|mobile.pagesummary.styles|mobile.placeholder.images|mobile.startup.images|oojs-ui-toolbars.icons|oojs-ui-widgets.icons|oojs-ui-windows.icons|oojs-ui.styles.icons-editing-advanced%2Cicons-editing-list%2Cicons-user|skins.minerva.icons.images.scripts|skins.minerva.icons.images.scripts.misc|skins.minerva.icons.page.issues.default.color|skins.minerva.icons.page.issues.medium.color|skins.minerva.icons.page.issues.uncolored|skins.minerva.options%2Cscripts|user.defaults&skin=minerva&version=9gj3r:13020)
    at HTMLDocument.<anonymous> (load.php?debug=true&lang=en&modules=ext.centralNotice.choiceData%2CgeoIP%2CstartUp|ext.centralauth.ForeignApi|ext.centralauth.centralautologin.clearcookie|ext.echo.api%2Cinit|ext.eventLogging%2Cflow%2CnavigationTiming%2CwikimediaEvents|ext.flow.components%2Cdm%2Ctemplating%2Cui|ext.flow.jquery.conditionalScroll%2CfindWithParent|ext.flow.visualEditor.icons|ext.wikimediaEvents.loggedin|jquery%2Cmoment%2Coojs%2Coojs-router%2Coojs-ui%2Coojs-ui-core%2Coojs-ui-toolbars%2Coojs-ui-widgets%2Coojs-ui-windows%2Csite|jquery.client%2Ccookie%2Cthrottle-debounce|mediawiki.ForeignApi%2CString%2CTitle%2CUri%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Crouter%2Cstorage%2Ctemplate%2Cuser%2Cutil%2Cviewport|mediawiki.ForeignApi.core|mediawiki.libs.pluralruleparser|mediawiki.page.startup|mediawiki.page.watch.ajax|mediawiki.template.handlebars%2Cmustache|mobile.init%2Cstartup|mobile.messageBox.styles|mobile.ooui.icons|mobile.pagelist.styles|mobile.pagesummary.styles|mobile.placeholder.images|mobile.startup.images|oojs-ui-toolbars.icons|oojs-ui-widgets.icons|oojs-ui-windows.icons|oojs-ui.styles.icons-editing-advanced%2Cicons-editing-list%2Cicons-user|skins.minerva.icons.images.scripts|skins.minerva.icons.images.scripts.misc|skins.minerva.icons.page.issues.default.color|skins.minerva.icons.page.issues.medium.color|skins.minerva.icons.page.issues.uncolored|skins.minerva.options%2Cscripts|user.defaults&skin=minerva&version=9gj3r:11038)
    at mightThrow (jquery.js?11c05:3557)
    at process (jquery.js?11c05:3625)

Environments observed

  • Browser version: 84.0.4147.89
  • OS version: macOS Catalina (10.15.5)

Check any additional observations

Notes

  1. The error is triggered by this line: https://gerrit.wikimedia.org/g/mediawiki/skins/MinervaNeue/+/eab9cb47f6cc0565d074324cbb34d62d8f567eab/resources/skins.minerva.scripts/talk.js#13
  2. After some investigation, this error can be triggered by executing the following on any wiki with the Flow extension loaded.
mw.Title.newFromText( 'Topic:Foo' ).getTalkPage();

Event Timeline

Restricted Application added subscribers: Masumrezarock100, Aklapper. · View Herald Transcript

This appears to be a bug in mw.Title.makeTitle, which doesn't test whether namespace is a valid namespace ID prior to passing it to getNamespacePrefix. For example, you can trigger this error by executing the following on any wiki:

mw.Title.makeTitle( 1234567890, 'Foo' );