Skip to content

Commit

Permalink
add header validation to decompressFile
Browse files Browse the repository at this point in the history
  • Loading branch information
StillGreen-san committed Jul 15, 2023
1 parent c821771 commit 270d761
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
2 changes: 2 additions & 0 deletions inc/savefile.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,8 @@ class SaveFile
*/
SaveFile(std::vector<uint8_t> data);

static bool isValid(Header header);

private:
std::vector<uint8_t> dataBuffer;
};
Expand Down
5 changes: 5 additions & 0 deletions src/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ SaveFile App::decompressFile(const void* compressedData, uint32_t size)
}

const auto* inputHeader = static_cast<const SaveFile::Header*>(compressedData);
if(!SaveFile::isValid(*inputHeader))
{
return {0, 0};
}

std::vector<uint8_t> decompressedData(HeaderSize + inputHeader->userProp3, 0);
new(decompressedData.data()) SaveFile::Header{*inputHeader};

Expand Down
7 changes: 5 additions & 2 deletions src/savefile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,13 @@ SaveFile::SaveFile(uint32_t chunks, uint32_t totalBytes)
}
SaveFile::SaveFile(std::vector<uint8_t> data) : dataBuffer{std::move(data)}
{
if(dataBuffer.size() < sizeof(Header) || header().magic != SaveFile::magic || header().formatVersion != 2 ||
header()._reserved_ != 0)
if(dataBuffer.size() < sizeof(Header) || !SaveFile::isValid(header()))
{
reset(0, 0);
}
}
bool SaveFile::isValid(SaveFile::Header header)
{
return header.magic == SaveFile::magic && header.formatVersion == 2 && header._reserved_ == 0;
}
} // namespace raymino

0 comments on commit 270d761

Please sign in to comment.