From fecfd4f2a307587533f3eafb3d987497ecc0c463 Mon Sep 17 00:00:00 2001 From: scawful Date: Sat, 10 Aug 2024 00:12:38 -0400 Subject: [PATCH] add sanity checks to Rom::LoadFromPointer --- src/app/rom.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/app/rom.cc b/src/app/rom.cc index 0f932ba5..14e85f34 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -108,7 +108,8 @@ absl::Status Rom::LoadAllGraphicsData() { GetGraphicsAddress(data(), i, version_constants().kOverworldGfxPtr1, version_constants().kOverworldGfxPtr2, 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; } @@ -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) { - if (!data) + if (!data || length == 0) return absl::InvalidArgumentError( "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; if (z3_load) {