Fix: crashes to desktop from game scripts when companies disappear
When a game script is in company mode, it pretends to be another company. When that company disappear (bankruptcy/merger), the game script still uses that company and it keeps calling functions as if it is that company. For example, ScriptEngine::IsBuildable internally dereferences Company without checks, causing a null dereference for any ScriptEngine function when called from a company scope of a company that has disappeared. Guard against this by extending the ScriptCompanyScope::IsValid check to also check for the company still being active.
This commit is contained in:
@@ -29,7 +29,7 @@ ScriptCompanyMode::~ScriptCompanyMode()
|
||||
|
||||
/* static */ bool ScriptCompanyMode::IsValid()
|
||||
{
|
||||
return ScriptObject::GetCompany() != OWNER_DEITY;
|
||||
return ::Company::IsValidID(ScriptObject::GetCompany());
|
||||
}
|
||||
|
||||
/* static */ bool ScriptCompanyMode::IsDeity()
|
||||
|
||||
Reference in New Issue
Block a user