VMManager: Fix read from moved-from string boot_params.filename

This commit is contained in:
chaoticgd 2025-11-09 18:01:22 +00:00 committed by Ty
parent 3a33400ca6
commit 0cd14c9919
3 changed files with 14 additions and 14 deletions

View File

@ -1448,7 +1448,7 @@ void FullscreenUI::DoStartPath(const std::string& path, std::optional<s32> state
if (VMManager::HasValidVM()) if (VMManager::HasValidVM())
return; return;
if (VMManager::Initialize(std::move(params))) if (VMManager::Initialize(params))
VMManager::SetState(VMState::Running); VMManager::SetState(VMState::Running);
}); });
} }
@ -1472,7 +1472,7 @@ void FullscreenUI::DoStartBIOS()
return; return;
VMBootParameters params; VMBootParameters params;
if (VMManager::Initialize(std::move(params))) if (VMManager::Initialize(params))
VMManager::SetState(VMState::Running); VMManager::SetState(VMState::Running);
else else
SwitchToLanding(); SwitchToLanding();
@ -7628,7 +7628,7 @@ void FullscreenUI::DoLoadState(std::string path)
VMBootParameters params; VMBootParameters params;
params.filename = std::move(boot_path); params.filename = std::move(boot_path);
params.save_state = std::move(path); params.save_state = std::move(path);
if (VMManager::Initialize(std::move(params))) if (VMManager::Initialize(params))
VMManager::SetState(VMState::Running); VMManager::SetState(VMState::Running);
} }
}); });

View File

@ -1267,7 +1267,7 @@ void VMManager::PrecacheCDVDFile()
} }
} }
bool VMManager::Initialize(VMBootParameters boot_params) bool VMManager::Initialize(const VMBootParameters& boot_params)
{ {
const Common::Timer init_timer; const Common::Timer init_timer;
pxAssertRel(s_state.load(std::memory_order_acquire) == VMState::Shutdown, "VM is shutdown"); pxAssertRel(s_state.load(std::memory_order_acquire) == VMState::Shutdown, "VM is shutdown");
@ -1303,9 +1303,9 @@ bool VMManager::Initialize(VMBootParameters boot_params)
std::string state_to_load; std::string state_to_load;
s_elf_override = std::move(boot_params.elf_override); s_elf_override = boot_params.elf_override;
if (!boot_params.save_state.empty()) if (!boot_params.save_state.empty())
state_to_load = std::move(boot_params.save_state); state_to_load = boot_params.save_state;
// if we're loading an indexed save state, we need to get the serial/crc from the disc. // if we're loading an indexed save state, we need to get the serial/crc from the disc.
if (boot_params.state_index.has_value()) if (boot_params.state_index.has_value())
@ -1345,7 +1345,7 @@ bool VMManager::Initialize(VMBootParameters boot_params)
} }
// Use specified source type. // Use specified source type.
CDVDsys_SetFile(boot_params.source_type.value(), std::move(boot_params.filename)); CDVDsys_SetFile(boot_params.source_type.value(), boot_params.filename);
CDVDsys_ChangeSource(boot_params.source_type.value()); CDVDsys_ChangeSource(boot_params.source_type.value());
} }
else else
@ -1431,17 +1431,17 @@ bool VMManager::Initialize(VMBootParameters boot_params)
Achievements::ResetHardcoreMode(true); Achievements::ResetHardcoreMode(true);
if (Achievements::IsHardcoreModeActive()) if (Achievements::IsHardcoreModeActive())
{ {
auto confirm_hc_mode_disable = [&boot_params, &state_to_load](const char* trigger) mutable { auto confirm_hc_mode_disable = [&boot_params](const char* trigger) mutable {
if (FullscreenUI::IsInitialized()) if (FullscreenUI::IsInitialized())
{ {
boot_params.elf_override = std::move(s_elf_override);
boot_params.save_state = std::move(state_to_load);
boot_params.disable_achievements_hardcore_mode = true;
s_elf_override = {}; s_elf_override = {};
VMBootParameters new_boot_params = boot_params;
new_boot_params.disable_achievements_hardcore_mode = true;
Achievements::ConfirmHardcoreModeDisableAsync(trigger, Achievements::ConfirmHardcoreModeDisableAsync(trigger,
[boot_params = std::move(boot_params)](bool approved) mutable { [new_boot_params = std::move(new_boot_params)](bool approved) mutable {
if (approved && Initialize(std::move(boot_params))) if (approved && Initialize(new_boot_params))
SetState(VMState::Running); SetState(VMState::Running);
}); });

View File

@ -84,7 +84,7 @@ namespace VMManager
const std::string& GetCurrentELF(); const std::string& GetCurrentELF();
/// Initializes all system components. /// Initializes all system components.
bool Initialize(VMBootParameters boot_params); bool Initialize(const VMBootParameters& boot_params);
/// Destroys all system components. /// Destroys all system components.
void Shutdown(bool save_resume_state); void Shutdown(bool save_resume_state);