1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Added range checks to values read from h3m.

Fixes reading of morale/luck values (-3..3) as unsigned leading to
overflow.
This commit is contained in:
Ivan Savenko
2024-02-05 21:27:55 +02:00
parent 4af4d1a75e
commit 87059be67b
13 changed files with 154 additions and 141 deletions

View File

@@ -183,6 +183,13 @@ RiverId MapReaderH3M::readRiver()
return result;
}
PrimarySkill MapReaderH3M::readPrimary()
{
PrimarySkill result(readUInt8());
assert(result <= PrimarySkill::KNOWLEDGE );
return result;
}
SecondarySkill MapReaderH3M::readSkill()
{
SecondarySkill result(readUInt8());
@@ -400,32 +407,35 @@ bool MapReaderH3M::readBool()
return result != 0;
}
ui8 MapReaderH3M::readUInt8()
int8_t MapReaderH3M::readInt8Checked(int8_t lowerLimit, int8_t upperLimit)
{
int8_t result = readInt8();
assert(result >= lowerLimit);
assert(result <= upperLimit);
return std::clamp(result, lowerLimit, upperLimit);
}
uint8_t MapReaderH3M::readUInt8()
{
return reader->readUInt8();
}
si8 MapReaderH3M::readInt8()
int8_t MapReaderH3M::readInt8()
{
return reader->readInt8();
}
ui16 MapReaderH3M::readUInt16()
uint16_t MapReaderH3M::readUInt16()
{
return reader->readUInt16();
}
si16 MapReaderH3M::readInt16()
{
return reader->readInt16();
}
ui32 MapReaderH3M::readUInt32()
uint32_t MapReaderH3M::readUInt32()
{
return reader->readUInt32();
}
si32 MapReaderH3M::readInt32()
int32_t MapReaderH3M::readInt32()
{
return reader->readInt32();
}
@@ -435,9 +445,4 @@ std::string MapReaderH3M::readBaseString()
return reader->readBaseString();
}
CBinaryReader & MapReaderH3M::getInternalReader()
{
return *reader;
}
VCMI_LIB_NAMESPACE_END