add sanity checks to Rom::LoadFromPointer

This commit is contained in:
scawful
2024-08-10 00:12:38 -04:00
parent c0a3e547f5
commit fecfd4f2a3

View File

@@ -108,7 +108,8 @@ absl::Status Rom::LoadAllGraphicsData() {
GetGraphicsAddress(data(), i, version_constants().kOverworldGfxPtr1, GetGraphicsAddress(data(), i, version_constants().kOverworldGfxPtr1,
version_constants().kOverworldGfxPtr2, version_constants().kOverworldGfxPtr2,
version_constants().kOverworldGfxPtr3); version_constants().kOverworldGfxPtr3);
ASSIGN_OR_RETURN(sheet, gfx::lc_lz2::DecompressV2(data(), offset)) ASSIGN_OR_RETURN(sheet,
gfx::lc_lz2::DecompressV2(rom_data_.data(), offset))
bpp3 = true; bpp3 = true;
} }
@@ -232,12 +233,14 @@ absl::Status Rom::LoadFromFile(const std::string& filename, bool z3_load) {
} }
absl::Status Rom::LoadFromPointer(uchar* data, size_t length, bool z3_load) { absl::Status Rom::LoadFromPointer(uchar* data, size_t length, bool z3_load) {
if (!data) if (!data || length == 0)
return absl::InvalidArgumentError( return absl::InvalidArgumentError(
"Could not load ROM: parameter `data` is empty."); "Could not load ROM: parameter `data` is empty.");
for (int i = 0; i < length; ++i) rom_data_.push_back(data[i]); if (!palette_groups_.empty()) palette_groups_.clear();
if (rom_data_.size() < length) rom_data_.resize(length);
std::copy(data, data + length, rom_data_.begin());
size_ = length; size_ = length;
if (z3_load) { if (z3_load) {