diff --git a/tools/cxbe/Exe.cpp b/tools/cxbe/Exe.cpp index 206b902da..a43c373b2 100644 --- a/tools/cxbe/Exe.cpp +++ b/tools/cxbe/Exe.cpp @@ -7,6 +7,7 @@ #include "Exe.h" +#include #include #include @@ -130,10 +131,12 @@ Exe::Exe(const char *x_szFilename) uint32 raw_size = m_SectionHeader[v].m_sizeof_raw; uint32 raw_addr = m_SectionHeader[v].m_raw_addr; + uint32 virt_size = m_SectionHeader[v].m_virtual_size; + uint32 max_size = std::max(virt_size, raw_size); - m_bzSection[v] = new uint08[raw_size]; + m_bzSection[v] = new uint08[max_size]; - memset(m_bzSection[v], 0, raw_size); + memset(m_bzSection[v], 0, max_size); if(raw_size == 0) { diff --git a/tools/cxbe/Xbe.cpp b/tools/cxbe/Xbe.cpp index d8a1a3873..33e3b52a9 100644 --- a/tools/cxbe/Xbe.cpp +++ b/tools/cxbe/Xbe.cpp @@ -9,6 +9,7 @@ #include "Xbe.h" #include "Exe.h" +#include #include #include #include @@ -513,8 +514,12 @@ Xbe::Xbe(class Exe *x_Exe, const char *x_szTitle, bool x_bRetail, const std::vec printf("Xbe::Xbe: Generating Section %.04X...", v); uint32 RawSize = m_SectionHeader[v].dwSizeofRaw; + uint32 VirtSize = m_SectionHeader[v].dwVirtualSize; + uint32 maxSize = std::max(VirtSize, RawSize); - m_bzSection[v] = new uint08[RawSize]; + m_bzSection[v] = new uint08[maxSize]; + + memset(m_bzSection[v], 0, maxSize); memcpy(m_bzSection[v], x_Exe->m_bzSection[v], RawSize);