Page MenuHomePhabricator

getIMELanguageList error reported for seemingly unrelated issues
Closed, DuplicatePublic

Description

The same error is reported to:

  • Break StructuredDiscussions with VE - T172634
  • Reset the filters on RecentChanges when the user clicks outside the drop down menu - T178191

Although two issues look completely unrelated, I have noticed both have same error reported in stacktraces in the comments. It should be worth investigating how this error causes two issues to appear and if there are other issues caused by same error, which could lead to peculiar situations. Here are quoted comments where errors are reported, and both seem to come when IME is added on input focus.

A stack trace from the user

TypeError: Cannot use 'in' operator to search for 'length' in ["en"]nb,hu,fr,de,nl,no,nn,en,sv,se
    at isArrayLike  (…)
    at Function.each (…)
    at Object.mw.ime.getIMELanguageList (<anonymous>:118:11274)
    at Object.mw.ime.addIme (<anonymous>:122:549)
    at Object.mw.ime.handleFocus (<anonymous>:122:456)
    at HTMLInputElement.<anonymous> (<anonymous>:122:1)

Without even attempting to edit I've registered this:

1Uncaught TypeError: Cannot use 'in' operator to search for 'length' in ["en"]en,es,ca,gl,eu,ast,ext
2
3load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in ["en"]en,es,ca,gl,eu,ast,ext
4 at isArraylike (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7)
5 at Function.each (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4)
6 at Object.mw.ime.getIMELanguageList (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:119:11822)
7 at Object.mw.ime.addIme (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:549)
8 at Object.mw.ime.handleFocus (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:456)
9 at HTMLInputElement.eval (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:1)
10 at HTMLBodyElement.dispatch (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:65)
11 at HTMLBodyElement.elemData.handle (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:60)
12 at Object.trigger (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:64)
13 at Object.simulate (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:69)
14isArraylike @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7
15each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4
16mw.ime.getIMELanguageList @ VM2315:119
17mw.ime.addIme @ VM2315:123
18mw.ime.handleFocus @ VM2315:123
19(anonymous) @ VM2315:123
20dispatch @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:65
21elemData.handle @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:60
22trigger @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:64
23simulate @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:69
24handler @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:73
25trigger @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:68
26trigger @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:64
27(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:75
28each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:5
29each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:2
30trigger @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:75
31jQuery.fn.(anonymous function) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:124
32OO.ui.PanelLayout.focus @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:144
33OO.ui.IndexLayout.focus @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:173
34(anonymous) @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:172
35fire @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:45
36add @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:45
37OO.ui.IndexLayout.onStackLayoutSet @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:172
38oo.EventEmitter.emit @ VM2287:236
39OO.ui.StackLayout.setItem @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:161
40OO.ui.IndexLayout.setTabPanel @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:178
41OO.ui.IndexLayout.onTabSelectWidgetSelect @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:173
42oo.EventEmitter.emit @ VM2287:236
43OO.ui.SelectWidget.selectItem @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:83
44OO.ui.SelectWidget.chooseItem @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:83
45OO.ui.SelectWidget.onMouseUp @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:75
46load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in ["en"]en,es,ca,gl,eu,ast,ext
47 at isArraylike (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7)
48 at Function.each (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4)
49 at Object.mw.ime.getIMELanguageList (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:119:11822)
50 at Object.mw.ime.addIme (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:549)
51 at Object.mw.ime.handleFocus (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:456)
52 at HTMLInputElement.eval (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:1)
53 at HTMLBodyElement.dispatch (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:65)
54 at HTMLBodyElement.elemData.handle (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:60)
55 at Object.trigger (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:64)
56 at HTMLInputElement.<anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:75)
57isArraylike @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7
58each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4
59mw.ime.getIMELanguageList @ VM2315:119
60mw.ime.addIme @ VM2315:123
61mw.ime.handleFocus @ VM2315:123
62(anonymous) @ VM2315:123
63dispatch @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:65
64elemData.handle @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:60
65trigger @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:64
66(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:75
67each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:5
68each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:2
69trigger @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:75
70jQuery.fn.(anonymous function) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:124
71OO.ui.mixin.TabIndexedElement.focus @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:23
72ve.ui.MWLinkAnnotationInspector.onLinkTypeIndexSet @ VM2317:548
73oo.EventEmitter.emit @ VM2287:236
74OO.ui.IndexLayout.setTabPanel @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:178
75OO.ui.IndexLayout.onTabSelectWidgetSelect @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:173
76oo.EventEmitter.emit @ VM2287:236
77OO.ui.SelectWidget.selectItem @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:83
78OO.ui.SelectWidget.chooseItem @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:83
79OO.ui.SelectWidget.onMouseUp @ load.php?debug=false&lang=en&modules=oojs-ui-core%2Coojs-ui-widgets|oojs-ui.styles.icons-editing-advanced&skin=monobook&version=100svcx:75
80load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in ["en"]en,es,ca,gl,eu,ast,ext
81 at isArraylike (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7)
82 at Function.each (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4)
83 at Object.mw.ime.getIMELanguageList (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:119:11822)
84 at Object.mw.ime.addIme (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:549)
85 at Object.mw.ime.handleFocus (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:456)
86 at HTMLInputElement.eval (eval at <anonymous> (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4), <anonymous>:123:1)
87 at HTMLBodyElement.dispatch (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:65)
88 at HTMLBodyElement.elemData.handle (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:60)
89 at Object.trigger (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:64)
90 at Object.simulate (load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:69)
91isArraylike @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:7
92each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4
93mw.ime.getIMELanguageList @ VM2315:119
94mw.ime.addIme @ VM2315:123
95mw.ime.handleFocus @ VM2315:123
96(anonymous) @ VM2315:123
97dispatch @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:65
98elemData.handle @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:60
99trigger @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:64
100simulate @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:69
101handler @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:73

After that, I went and repeat adding the interwiki link to es:WP:TW using the VisualEditor but no error was registered on the console. Still no buttons worked.

I added debug=true to the URL.

1load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:577 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in ["en"]en,es,ca,gl,eu,ast,ext
2 at isArraylike (load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:577)
3 at Function.each (load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:359)
4 at Object.mw.ime.getIMELanguageList (ext.uls.ime.js?72e70:53)
5 at Object.mw.ime.addIme (ext.uls.ime.js?72e70:281)
6 at Object.mw.ime.handleFocus (ext.uls.ime.js?72e70:268)
7 at HTMLInputElement.<anonymous> (ext.uls.ime.js?72e70:229)
8 at HTMLBodyElement.dispatch (load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4670)
9 at HTMLBodyElement.elemData.handle (load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4338)
10 at Object.trigger (load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4579)
11 at Object.simulate (load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4906)
12isArraylike @ load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:577
13each @ load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:359
14mw.ime.getIMELanguageList @ ext.uls.ime.js?72e70:53
15mw.ime.addIme @ ext.uls.ime.js?72e70:281
16mw.ime.handleFocus @ ext.uls.ime.js?72e70:268
17(anonymous) @ ext.uls.ime.js?72e70:229
18dispatch @ load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4670
19elemData.handle @ load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4338
20trigger @ load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4579
21simulate @ load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:4906
22handler @ load.php?debug=true&lang=en&modules=jquery%2Cmediawiki|mediawiki.legacy.wikibits&only=scripts&skin=monobook&version=10b6ayp:5169

P5865#32067 may be of interest as well

Full console log: P5866 (very large)

Event Timeline

The root cause is that for the affected users, $.ime.preferences.getPreviousLanguages() is returning a string '["en"]' instead of an array ["en"]. The corrupted data is loaded from user preferences (mw.user.options.get('uls-preferences')), e.g.: (T187952#3997821)

{"webfonts":{"fonts":{"en":"system"},"webfonts-enabled":false},"ime":{"isDirty":true,"language":"en","previousLanguages":"[\"en\"]","imes":{"en":"system"}}}

I don't know if current code can still produce the corrupted data, or if it was some old bug that caused the corrupted data to be saved. I couldn't reproduce it.

ULS must validate the contents of the 'uls-preferences' user option before using it. It may not be valid JSON, and it may not be the structure it expects.