1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-20 05:23:04 +01:00

Fix #22231: Invalid object version can cause a crash (#22675)

This commit is contained in:
mrmbernardi
2024-09-03 04:21:49 +10:00
committed by GitHub
parent fb771b6923
commit 903460ff52
2 changed files with 5 additions and 3 deletions

View File

@@ -1,5 +1,6 @@
0.4.15 (in development)
------------------------------------------------------------------------
- Fix: [#22231] Invalid object version can cause a crash.
- Fix: [#22653] Add several .parkpatch files for missing water tiles in RCT1 and RCT2 scenarios.
0.4.14 (2024-09-01)

View File

@@ -405,12 +405,13 @@ ObjectVersion VersionTuple(std::string_view version)
size_t highestIndex = std::min(nums.size(), VersionNumFields);
for (size_t i = 0; i < highestIndex; i++)
{
auto value = stoi(nums.at(i));
auto value = stoll(nums.at(i));
constexpr auto maxValue = std::numeric_limits<uint16_t>().max();
if (value > maxValue)
{
LOG_WARNING(
"Version value too high in version string '%s', version value will be capped to %i.", version, maxValue);
"Version value too high in version string '%.*s', version value will be capped to %i.",
static_cast<int>(version.size()), version.data(), maxValue);
value = maxValue;
}
versions[i] = value;
@@ -418,7 +419,7 @@ ObjectVersion VersionTuple(std::string_view version)
}
catch (const std::exception&)
{
LOG_WARNING("Malformed version string '%s', expected X.Y.Z", version);
LOG_WARNING("Malformed version string '%.*s', expected X.Y.Z", static_cast<int>(version.size()), version.data());
}
return std::make_tuple(versions[0], versions[1], versions[2]);