mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-17 18:27:56 -05:00
ZoneCodeGenerator: Fix XAssetList of T6 being loaded into block memory and therefore causing overflows
This commit is contained in:
@ -14,19 +14,21 @@ public:
|
||||
return static_cast<T*>(Alloc(align));
|
||||
}
|
||||
|
||||
virtual void LoadData(void* dst, size_t size) = 0;
|
||||
virtual void LoadDataRaw(void* dst, size_t size) = 0;
|
||||
virtual void LoadDataInBlock(void* dst, size_t size) = 0;
|
||||
virtual void IncBlockPos(size_t size) = 0;
|
||||
virtual void LoadNullTerminated(void* dst) = 0;
|
||||
|
||||
template<typename T>
|
||||
void Load(T* dst)
|
||||
{
|
||||
LoadData(dst, sizeof(T));
|
||||
LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), sizeof(T));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void Load(T* dst, const uint32_t count)
|
||||
{
|
||||
LoadData(const_cast<void*>(reinterpret_cast<const void*>(dst)), count * sizeof(T));
|
||||
LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), count * sizeof(T));
|
||||
}
|
||||
|
||||
virtual void** InsertPointer() = 0;
|
||||
|
@ -94,7 +94,12 @@ void* XBlockInputStream::Alloc(const int align)
|
||||
return &block->m_buffer[m_block_offsets[block->m_index]];
|
||||
}
|
||||
|
||||
void XBlockInputStream::LoadData(void* dst, const size_t size)
|
||||
void XBlockInputStream::LoadDataRaw(void* dst, const size_t size)
|
||||
{
|
||||
m_stream->Load(dst, size);
|
||||
}
|
||||
|
||||
void XBlockInputStream::LoadDataInBlock(void* dst, const size_t size)
|
||||
{
|
||||
assert(!m_block_stack.empty());
|
||||
|
||||
@ -118,6 +123,17 @@ void XBlockInputStream::LoadData(void* dst, const size_t size)
|
||||
|
||||
m_stream->Load(dst, size);
|
||||
|
||||
IncBlockPos(size);
|
||||
}
|
||||
|
||||
void XBlockInputStream::IncBlockPos(const size_t size)
|
||||
{
|
||||
assert(!m_block_stack.empty());
|
||||
|
||||
if (m_block_stack.empty())
|
||||
return;
|
||||
|
||||
XBlock* block = m_block_stack.top();
|
||||
m_block_offsets[block->m_index] += size;
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,9 @@ public:
|
||||
|
||||
void* Alloc(int align) override;
|
||||
|
||||
void LoadData(void* dst, size_t size) override;
|
||||
void LoadDataRaw(void* dst, size_t size) override;
|
||||
void LoadDataInBlock(void* dst, size_t size) override;
|
||||
void IncBlockPos(size_t size) override;
|
||||
void LoadNullTerminated(void* dst) override;
|
||||
|
||||
void** InsertPointer() override;
|
||||
|
Reference in New Issue
Block a user