Selecting of level file crashes replay browser

Started by Forestidia86, January 15, 2018, 07:29:35 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Forestidia86

This actually already applied to the 0.9.7 but I've never realized it:
If you put level files in the replay folder and select them from the replay browser the game crashes with Access Violation. In earlier versions there was no problem and it's a bit nasty to have a plain crash just upon selection there.
(This crash happens in the provided binaries as well.)

Full error message (debug build, Win 7):

Lix version:  0.9.8
Session date: 2018-01-15 20:06:35
    30.37 :0:
    30.37 Access Violation
    30.37 0x005105F9 in void menu.browser.replay.BrowserReplay.onFileHighlight(immutable(file.filename.base.IFilename)) at C:\...\LixD-master0_9_8\src\menu\browser\replay.d(82)
0x005112FD in void menu.browser.select.BrowserHighlightSelect.highlight(immutable(file.filename.base.IFilename)) at C:\...\LixD-master0_9_8\src\menu\browser\select.d(58)
0x00511418 in void menu.browser.select.BrowserHighlightSelect.onPickerExecuteFile(immutable(file.filename.base.IFilename)) at C:\...\LixD-master0_9_8\src\menu\browser\select.d(84)
0x0050F32B in D4menu7browser6highli16BrowserHighlight__T6__ctorTC3gui6picker8tilerlev11ReplayTilerZQBrMFxAyay9685BBFB3F63E9BE4E3A4927E21906FF at C:\...\LixD-master0_9_8\src\menu\browser\highli.d(41)
0x004F3A72 in D3gui6pickerQh6Picker__T6__ctorTCQBgQBf8tilerlev11ReplayTilerZQBmMFSQCpQCoQCr__T12PickerConfigT84DD4EB3876DF06FF7B69392533B73CC at C:\...\LixD-master0_9_8\src\gui\picker\picker.d(72)
0x004F6B07 in void gui.picker.tiler.FileTiler.calcSelf() at C:\...\LixD-master0_9_8\src\gui\picker\tiler.d(133)
0x004EB0BC in void gui.element.Element.calc() at C:\...\LixD-master0_9_8\src\gui\element.d(124)
0x004EB407 in void gui.element.Element.calc().__lambda1!(gui.element.Element).__lambda1(gui.element.Element)
0x004EB448 in void std.algorithm.iteration.each!(gui.element.Element.calc().__lambda1).each!(gui.element.Element[]).each(ref gui.element.Element[]) at C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\iteration.d(944)
0x004EB0B4 in void gui.element.Element.calc() at C:\...\LixD-master0_9_8\src\gui\element.d(123)
0x004EB407 in void gui.element.Element.calc().__lambda1!(gui.element.Element).__lambda1(gui.element.Element)
0x004EB448 in void std.algorithm.iteration.each!(gui.element.Element.calc().__lambda1).each!(gui.element.Element[]).each(ref gui.element.Element[]) at C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\iteration.d(944)
0x004EB0B4 in void gui.element.Element.calc() at C:\...\LixD-master0_9_8\src\gui\element.d(123)
0x004EB407 in void gui.element.Element.calc().__lambda1!(gui.element.Element).__lambda1(gui.element.Element)
0x004EB448 in void std.algorithm.iteration.each!(gui.element.Element.calc().__lambda1).each!(gui.element.Element[]).each(ref gui.element.Element[]) at C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\iteration.d(944)
0x004EB0B4 in void gui.element.Element.calc() at C:\...\LixD-master0_9_8\src\gui\element.d(123)
0x004F96E6 in void gui.root.calc() at C:\...\LixD-master0_9_8\src\gui\root.d(96)
0x00428C2F in void basics.mainloop.MainLoop.calc() at C:\...\LixD-master0_9_8\src\basics\mainloop.d(159)
0x0042898B in void basics.mainloop.MainLoop.mainLoop() at C:\...\LixD-master0_9_8\src\basics\mainloop.d(82)
0x0050E540 in int main.main(immutable(char)[][]).__lambda2() at C:\...\LixD-master0_9_8\src\main.d(39)
0x00530453 in extern (C) int allegro5.system.al_run_allegro(scope int delegate()).main_runner(int, char**) at C:\Users\...\AppData\Roaming\dub\packages\allegro-4.0.1_5.2.0\allegro\allegro5\system.d(45)
0x00530437 in int allegro5.system.al_run_allegro(scope int delegate()) at C:\Users\...\AppData\Roaming\dub\packages\allegro-4.0.1_5.2.0\allegro\allegro5\system.d(62)
0x0050E4F3 in _Dmain at C:\...\LixD-master0_9_8\src\main.d(35)
0x0053D933 in void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll().__lambda1()
0x0053D8F7 in void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()
0x0053D7F8 in _d_run_main
0x0050E56C in main at C:\...\LixD-master0_9_8\src\verify\counter.d(7)
0x0057C119 in mainCRTStartup
0x7660337A in BaseThreadInitThunk
0x77C19882 in RtlInitializeExceptionChain
0x77C19855 in RtlInitializeExceptionChain


Simon

Wow, blatant bug. Even an empty text file crashes when we load it as replay.

Haven't investigated yet. But this sort of consistent crash tends to be easy to fix. I haven't written a unittest for these corner cases either; I should do that.

-- Simon

Forestidia86

I actually actively used (in the older versions) the possibility to view level files in the replay browser in the course of level fixing. In view of that it is very astonishing that I haven't encountered the error earlier. (My replay folder is a bit of a "mine field" now.)

Simon

I pushed a fix to stable repository's master. You can build yourself and it should be fixed for you.

Unless somebody else needs this fix direly, too, I'll wait 1-2 days with the next release, getting more insight on how flaky 0.9.8 is.

-- Simon

Forestidia86

Thanks, Simon, for the quick fix. It seems to work.