mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-02 06:40:42 -07:00
fix qma directory create CreateFileW_Hook to prevent recursive calls (#585)
## Link to GitHub Issue or related Pull Request, if one exists N/A ## Description of change Move `dirs_created` flag assignment before `dir_create_recursive` calls in `CreateFileW_Hook` to prevent stack overflow. `dir_create_recursive` calls `_wstat64` (ucrtbase), which internally calls `CreateFileW`, re-entering the hook before the flag is set. GCC 13 preserved the source order, but GCC 15 reorders the flag store after the function calls, causing infinite recursion. Note: I'm not fully confident the root cause is specific to GCC version differences. Also, I cannot determine whether this directory creation hook is truly necessary. Without these directories the game boots but quizzes won't load, making gameplay impossible. It may be worth removing this hook entirely, but for now this fix is needed to prevent the crash. ## Testing Verified title screen transition on LMA-2019022700. Crashes on the latest build without this fix.
This commit is contained in:
@@ -88,10 +88,10 @@ namespace games::qma {
|
||||
// create quiz directory
|
||||
static bool dirs_created = false;
|
||||
if (!dirs_created && _wcsnicmp(lpFileName, L"E:\\LMA", 6) == 0) {
|
||||
dirs_created = true;
|
||||
fileutils::dir_create_recursive("E:\\LMA\\quiz11");
|
||||
fileutils::dir_create_recursive("E:\\LMA\\quiz13");
|
||||
fileutils::dir_create_recursive("E:\\LMA\\quiz15");
|
||||
dirs_created = true;
|
||||
}
|
||||
|
||||
// return result
|
||||
|
||||
Reference in New Issue
Block a user