[Bug 48006] Final Fantasy XIV Launcher stuck on splash screen

WineHQ Bugzilla wine-bugs at winehq.org
Sat Feb 13 10:57:58 CST 2021


https://bugs.winehq.org/show_bug.cgi?id=48006

--- Comment #14 from Thomas Kowaliczek <linuxdonald at posteo.de> ---
(In reply to Anastasius Focht from comment #12)
> Hello folks,
> 
> confirming. There are multiple jscript and mshtml/Wine-Gecko bugs at play
> here.
> 
> Adding stable link via Internet Archive:
> 
> https://web.archive.org/web/20190701092018/http://gdl.square-enix.com/ffxiv/
> inst/ffxivsetup.exe
> 
> The launcher gets stuck in a live-loop without any overrides.
> 
> --- snip ---
> $ pwd
> /home/focht/.wine/drive_c/Program Files (x86)/SquareEnix/FINAL FANTASY XIV -
> A Realm Reborn/boot
> 
> $ WINEDEBUG=+mshtml,+jscript wine ./ffxivboot.exe >>log.txt 2>&
> ...
> 0118:trace:mshtml:HTMLWindow2_QueryInterface (02E30ED8)->(IID_IDispatchEx
> 0031EC64)
> 0118:trace:mshtml:HTMLWindow2_AddRef (02E30ED8) ref=19
> 0118:trace:jscript:Array_reduce
> 0118:fixme:jscript:Array_reduce Could not get length
> 0118:trace:mshtml:HTMLWindow2_Release (02E30ED8) ref=18
> 0118:trace:jscript:DispatchEx_Release (10B7E428) ref=4
> 0118:warn:jscript:unwind_exception Exception 800a1396 undefined in:
> 0118:warn:jscript:print_backtrace 0	[unnamed]()
> 0118:warn:jscript:print_backtrace 1	[unnamed](L"t"=obj(10B7E510))
> 0118:warn:jscript:print_backtrace 2	[unnamed](L"t"=str(L"reduce"))
> 0118:warn:jscript:print_backtrace 3	10B7C590->[unnamed](L"t"=obj(10B7CB78),
> L"r"=obj(10B7C590), L"n"=obj(10ADC330))
> 0118:warn:jscript:print_backtrace 4	L"i"(L"t"=428.000000)
> 0118:warn:jscript:print_backtrace 5	10AE2DD8->[unnamed](L"A"=obj(10AE2D10),
> L"g"=obj(10AE2DD8), L"B"=obj(10ADC330))
> 0118:warn:jscript:print_backtrace 6	L"i"(L"t"=640.000000)
> 0118:warn:jscript:print_backtrace 7	L"r"()
> 0118:warn:jscript:print_backtrace 8	[unnamed](L"e"=obj(10A8C400))
> 0118:warn:jscript:print_backtrace 9	[unnamed]([detached frame])
> 0118:warn:jscript:print_backtrace 10	[native code]
> 0118:trace:jscript:throw_error 800a1396
> 0118:trace:jscript:set_error_location source
> L"r.call(null,n||function(){throw
> 1},1)}))}},function(t,n){t.exports=function(t,n,r){if(!(t instanceof
> n))throw TypeError(\"Incorrect \"+(r?r+\" \":\"\")+\"invocation\");return
> t}},,,function(t,n,r){var
> e=r(225),o=r(183).concat(\"length\",\"prototype\");n.f=Object.
> getOwnPropertyNames||funct"... in
> L"(window.webpackJsonp=window.webpackJsonp||[]).push([[8],[,,,,function(t,n,
> r){var
> e=r(9),o=r(36).f,i=r(41),u=r(38),c=r(179),f=r(223),a=r(121);t.
> exports=function(t,n){var
> r,s,p,l,v,h=t.target,y=t.global,d=t.stat;if(r=y?e:d?e[h]||c(h,{}):(e[h]||{}).
> prototype)for(s in n){if(l=n[s],p=t.noTarge"...
> 0118:trace:jscript:DispatchEx_Release (10B7E928) ref=1
> 0118:trace:jscript:DispatchEx_Release (10B7E428) ref=2
> 0118:trace:jscript:detach_variable_object detaching 10B7E7F8
> 0118:trace:jscript:prop_get L"prototype" ret obj(02EA41A0)
> 0118:trace:jscript:DispatchEx_Release (02EA41A0) ref=2
> 0118:trace:jscript:init_dispex 10B2AB50 (02EA41A0)
> 0118:trace:jscript:jsdisp_define_property L"number" = -2146823274.000000
> 0118:trace:jscript:jsdisp_define_property L"message" = str(L"JScript object
> expected")
> 0118:trace:jscript:jsdisp_define_property L"description" = str(L"JScript
> object expected")
> 0118:trace:jscript:init_dispex 10B7EAF8 (00000000)
> 0118:trace:jscript:ensure_prop_name creating prop L"t" flags 1c00 
> ...
> 0118:trace:jscript:jsdisp_define_property L"1" = accessor { get: 10B19D78
> set: 00000000 }
> 0118:trace:jscript:DispatchEx_Release (10AE3368) ref=3
> 0118:trace:jscript:interp_pop 5
> 0118:trace:jscript:DispatchEx_Release (10B850E0) ref=1
> 0118:trace:jscript:DispatchEx_Release (10B85018) ref=3
> 0118:trace:jscript:DispatchEx_Release (10AE3368) ref=1
> 0118:trace:jscript:interp_push_acc 
> 0118:trace:jscript:interp_setret 
> 0118:trace:jscript:interp_ret 
> 0118:trace:jscript:DispatchEx_Release (10B851C8) ref=1
> 0118:trace:jscript:jsdisp_free (10B851C8)
> 0118:trace:jscript:interp_pop 5
> 0118:trace:jscript:DispatchEx_Release (10B850E0) ref=0
> 0118:trace:jscript:jsdisp_free (10B850E0)
> 0118:trace:jscript:DispatchEx_Release (10B19D78) ref=7
> 0118:trace:jscript:DispatchEx_Release (10B85018) ref=2
> 0118:trace:jscript:DispatchEx_Release (10B19A78) ref=2
> 0118:trace:jscript:interp_push_acc 
> 0118:trace:jscript:interp_jmp 2689
> 0118:trace:jscript:interp_pop 1
> 0118:trace:jscript:DispatchEx_Release (10B85018) ref=1
> 0118:trace:jscript:interp_ident L"r"
> 0118:trace:jscript:identifier_eval L"r"
> 0118:trace:jscript:jsdisp_get_id not found L"r"
> 0118:trace:jscript:identifier_eval returning ref 74 for 0
> 0118:trace:jscript:interp_str L"call"
> 0118:trace:jscript:interp_memberid 0
> 0118:trace:jscript:DispatchEx_Release (10B84BC8) ref=3
> 0118:trace:jscript:interp_local 0: L"t"
> 0118:trace:jscript:interp_ident L"s"
> 0118:trace:jscript:identifier_eval L"s"
> 0118:trace:jscript:jsdisp_get_id not found L"s"
> 0118:trace:jscript:identifier_eval returning ref 76 for 2
> 0118:trace:jscript:interp_ident L"p"
> 0118:trace:jscript:identifier_eval L"p"
> 0118:trace:jscript:jsdisp_get_id not found L"p"
> 0118:trace:jscript:identifier_eval returning ref 77 for 3
> 0118:trace:jscript:interp_call_member 3 0
> 0118:trace:jscript:Function_call 
> 0118:trace:jscript:Array_splice 
> 0118:trace:jscript:prop_get L"length" ret -1.000000
> 
> <live-loop in jscript code, churning 100% cpu>
> --- snip ---
> 
> I've attached a debugger to dump the callstack of the main thread which
> churns all the cpu:
> 
> --- snip ---
> jscript.Array_splice+444                 
> jscript.NativeFunction_call+CE           
> jscript.Function_call+BC                 
> jscript.invoke_prop_func+2ED             
> jscript.invoke_prop_func+128             
> jscript.disp_call+264                    
> jscript.exprval_call+6F                  
> jscript.interp_call_member+F9            
> jscript.exec_source+B82                  
> jscript.JScriptParse_ParseScriptText+2C4 
> mshtml.parse_elem_text+AA                
> mshtml.doc_insert_script+59              
> mshtml.run_insert_script+17C             
> mshtml.nsRunnable_Run+15                 
> ...
> --- snip ---
> 
> Using the strings in memory I found the executed jscript code on disk. A
> huge one-liner. I "beautified" it using https://beautifier.io/
> 
> The relevant part, where it live-looped in 'jscript.Array_splice' without
> returning, called from function r().
> 
> --- snip ---
> function(e) {
> 
>     function t(t) {
>         for (var o, i, l = t[0], c = t[1], s = t[2], d = 0, b = []; d <
> l.length; d++) i = l[d], Object.prototype.hasOwnProperty.call(n, i) && n[i]
> && b.push(n[i][0]), n[i] = 0;
>         for (o in c) Object.prototype.hasOwnProperty.call(c, o) && (e[o] =
> c[o]);
>         for (u && u(t); b.length;) b.shift()();
>         return a.push.apply(a, s || []), r()
>     }
> 
>     function r() {
>         for (var e, t = 0; t < a.length; t++) {
>             for (var r = a[t], o = !0, l = 1; l < r.length; l++) {
>                 var c = r[l];
>                 0 !== n[c] && (o = !1)
>             }
>             o && (a.splice(t--, 1), e = i(i.s = r[0]))
>         }
>         return e
>     }
>     var o = {},
>         n = {
>             4: 0
>         },
>         a = [];
> 
>     function i(t) {
>         if (o[t]) return o[t].exports;
>         var r = o[t] = {
>             i: t,
>             l: !1,
>             exports: {}
>         };
>         return e[t].call(r.exports, r, r.exports, i), r.l = !0, r.exports
>     }
> ...
> --- snip ---
> 
> I didn't debug further. It shouldn't be hard to figure out why the array
> splice doesn't return.
> 
> Using 'winetricks -q jscript' prevents the live-loop, only to run into next
> problems, mshtml insufficiencies.
> 
> BTW there are many Final Fantasy (XIV) bug reports in Wine Bugzilla that are
> out of date, invalid, fixed and dupes. Quite a mess. I have no energy /
> interest to go through all of them indivually. It will likely destroy a good
> mood for sure.
> 
> $ sha1sum ffxivsetup.exe 
> 10601e45ccbcaec81c8d0fda720cb8afc5a1f01b  ffxivsetup.exe
> 
> $ du -sh ffxivsetup.exe 
> 27M	ffxivsetup.exe
> 
> $ wine --version
> wine-6.0-250-gacd1b068a34
> 
> Regards

I think most of the open bug reports can be closed. On AppDB there are only
linked two bug reports.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.


More information about the wine-bugs mailing list