From 61a4c474f8ddfca79351020f34a63dd3f46f85ab Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 26 Jan 2024 20:34:15 +0000 Subject: [PATCH] Fix #10405, a3dd750: [Script] Test engine and vehicle type validity for ScriptGroup::GetNumEngines This fixes a crash that would occur if GetNumEngines was passed an invalid engine or an engine of a different vehicle type of that of the group. --- src/script/api/script_group.cpp | 5 ++++- src/script/api/script_group.hpp | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 62888ac0af..427aa48cb5 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -111,7 +111,10 @@ /* static */ SQInteger ScriptGroup::GetNumEngines(GroupID group_id, EngineID engine_id) { EnforceCompanyModeValid(-1); - if (!IsValidGroup(group_id) && group_id != GROUP_DEFAULT && group_id != GROUP_ALL) return -1; + if (!ScriptEngine::IsValidEngine(engine_id)) return -1; + bool valid_group = IsValidGroup(group_id); + if (!valid_group && group_id != GROUP_DEFAULT && group_id != GROUP_ALL) return -1; + if (valid_group && ScriptEngine::GetVehicleType(engine_id) != GetVehicleType(group_id)) return -1; return GetGroupNumEngines(ScriptObject::GetCompany(), group_id, engine_id); } diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index 9971525765..153fff3279 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -128,7 +128,9 @@ public: * Get the number of engines in a given group. * @param group_id The group to get the number of engines in. * @param engine_id The engine id to count. - * @pre IsValidGroup(group_id) || group_id == GROUP_ALL || group_id == GROUP_DEFAULT. + * @pre ScriptEngine::IsValidEngine(engine_id). + * @pre (IsValidGroup(group_id) && ScriptEngine::GetVehicleType(engine_id) == GetVehicleType(group_id)) || + group_id == GROUP_ALL || group_id == GROUP_DEFAULT. * @game @pre ScriptCompanyMode::IsValid(). * @return The number of engines with id engine_id in the group with id group_id. */