diff options
| author | bunnei <bunneidev@gmail.com> | 2018-07-19 08:45:54 -0700 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-19 08:45:54 -0700 | 
| commit | b0334af05b34b547343a6c65c39ab58429d4588b (patch) | |
| tree | a050679416738939836cbaedc7f84de26192bcd7 | |
| parent | 1bf7ae79c8451d00897037a67438da265654caf3 (diff) | |
| parent | 9abc5763b6ade0f3e7e6b3542f45bb867a634bba (diff) | |
Merge pull request #702 from lioncash/initialize
partition_filesystem: Ensure all class members of PartitionFilesystem are initialized
| -rw-r--r-- | src/core/file_sys/partition_filesystem.cpp | 29 | ||||
| -rw-r--r-- | src/core/file_sys/partition_filesystem.h | 10 | 
2 files changed, 15 insertions, 24 deletions
| diff --git a/src/core/file_sys/partition_filesystem.cpp b/src/core/file_sys/partition_filesystem.cpp index 15b1fb946..d4097a510 100644 --- a/src/core/file_sys/partition_filesystem.cpp +++ b/src/core/file_sys/partition_filesystem.cpp @@ -11,6 +11,11 @@  namespace FileSys { +bool PartitionFilesystem::Header::HasValidMagicValue() const { +    return magic == Common::MakeMagic('H', 'F', 'S', '0') || +           magic == Common::MakeMagic('P', 'F', 'S', '0'); +} +  PartitionFilesystem::PartitionFilesystem(std::shared_ptr<VfsFile> file) {      // At least be as large as the header      if (file->GetSize() < sizeof(Header)) { @@ -20,19 +25,17 @@ PartitionFilesystem::PartitionFilesystem(std::shared_ptr<VfsFile> file) {      // For cartridges, HFSs can get very large, so we need to calculate the size up to      // the actual content itself instead of just blindly reading in the entire file. -    Header pfs_header;      if (sizeof(Header) != file->ReadObject(&pfs_header)) {          status = Loader::ResultStatus::Error;          return;      } -    if (pfs_header.magic != Common::MakeMagic('H', 'F', 'S', '0') && -        pfs_header.magic != Common::MakeMagic('P', 'F', 'S', '0')) { +    if (!pfs_header.HasValidMagicValue()) {          status = Loader::ResultStatus::ErrorInvalidFormat;          return;      } -    bool is_hfs = pfs_header.magic == Common::MakeMagic('H', 'F', 'S', '0'); +    is_hfs = pfs_header.magic == Common::MakeMagic('H', 'F', 'S', '0');      size_t entry_size = is_hfs ? sizeof(HFSEntry) : sizeof(PFSEntry);      size_t metadata_size = @@ -40,27 +43,13 @@ PartitionFilesystem::PartitionFilesystem(std::shared_ptr<VfsFile> file) {      // Actually read in now...      std::vector<u8> file_data = file->ReadBytes(metadata_size); +    const size_t total_size = file_data.size(); -    if (file_data.size() != metadata_size) { -        status = Loader::ResultStatus::Error; -        return; -    } - -    size_t total_size = file_data.size(); -    if (total_size < sizeof(Header)) { +    if (total_size != metadata_size) {          status = Loader::ResultStatus::Error;          return;      } -    memcpy(&pfs_header, file_data.data(), sizeof(Header)); -    if (pfs_header.magic != Common::MakeMagic('H', 'F', 'S', '0') && -        pfs_header.magic != Common::MakeMagic('P', 'F', 'S', '0')) { -        status = Loader::ResultStatus::ErrorInvalidFormat; -        return; -    } - -    is_hfs = pfs_header.magic == Common::MakeMagic('H', 'F', 'S', '0'); -      size_t entries_offset = sizeof(Header);      size_t strtab_offset = entries_offset + (pfs_header.num_entries * entry_size);      content_offset = strtab_offset + pfs_header.strtab_size; diff --git a/src/core/file_sys/partition_filesystem.h b/src/core/file_sys/partition_filesystem.h index 9656b40bf..7c7a75816 100644 --- a/src/core/file_sys/partition_filesystem.h +++ b/src/core/file_sys/partition_filesystem.h @@ -42,6 +42,8 @@ private:          u32_le num_entries;          u32_le strtab_size;          INSERT_PADDING_BYTES(0x4); + +        bool HasValidMagicValue() const;      };      static_assert(sizeof(Header) == 0x10, "PFS/HFS header structure size is wrong"); @@ -73,11 +75,11 @@ private:  #pragma pack(pop) -    Loader::ResultStatus status; +    Loader::ResultStatus status{}; -    Header pfs_header; -    bool is_hfs; -    size_t content_offset; +    Header pfs_header{}; +    bool is_hfs = false; +    size_t content_offset = 0;      std::vector<VirtualFile> pfs_files;      std::vector<VirtualDir> pfs_dirs; | 
