1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-21 10:41:33 +00:00

Add a safeguard to load only supported records

This commit is contained in:
Andrei Kortunov 2023-06-18 19:49:49 +04:00
parent 6adcd122a8
commit 04be1526b2

View file

@ -210,12 +210,11 @@ namespace MWWorld
template <class T, class Id> template <class T, class Id>
RecordId TypedDynamicStore<T, Id>::load(ESM::ESMReader& esm) RecordId TypedDynamicStore<T, Id>::load(ESM::ESMReader& esm)
{ {
T record;
bool isDeleted = false;
if constexpr (!ESM::isESM4Rec(T::sRecordId)) if constexpr (!ESM::isESM4Rec(T::sRecordId))
{ {
T record;
bool isDeleted = false;
record.load(esm, isDeleted); record.load(esm, isDeleted);
}
std::pair<typename Static::iterator, bool> inserted = mStatic.insert_or_assign(record.mId, record); std::pair<typename Static::iterator, bool> inserted = mStatic.insert_or_assign(record.mId, record);
if (inserted.second) if (inserted.second)
@ -226,6 +225,14 @@ namespace MWWorld
else else
return RecordId(); return RecordId();
} }
else
{
std::stringstream msg;
msg << "Can not load record of type ESM::REC_" << getRecNameString(T::sRecordId).toStringView()
<< ": ESM::ESMReader can load only ESM3 records.";
throw std::runtime_error(msg.str());
}
}
template <class T, class Id> template <class T, class Id>
void TypedDynamicStore<T, Id>::setUp() void TypedDynamicStore<T, Id>::setUp()