Moved whitelist checks from FS_User to the Archive_NCCH handler.
This commit is contained in:
parent
a8aef599e0
commit
cea19fd659
2 changed files with 37 additions and 53 deletions
|
@ -9,6 +9,7 @@
|
|||
#include "common/file_util.h"
|
||||
#include "common/logging/log.h"
|
||||
#include "common/string_util.h"
|
||||
#include "core/core.h"
|
||||
#include "core/file_sys/archive_ncch.h"
|
||||
#include "core/file_sys/ivfc_archive.h"
|
||||
#include "core/hle/service/fs/archive.h"
|
||||
|
@ -33,10 +34,43 @@ ArchiveFactory_NCCH::ArchiveFactory_NCCH(const std::string& nand_directory)
|
|||
ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_NCCH::Open(const Path& path) {
|
||||
auto vec = path.AsBinary();
|
||||
const u32* data = reinterpret_cast<u32*>(vec.data());
|
||||
std::string file_path = GetNCCHPath(mount_point, data[1], data[0]);
|
||||
u32 high = data[1];
|
||||
u32 low = data[0];
|
||||
std::string file_path = GetNCCHPath(mount_point, high, low);
|
||||
auto file = std::make_shared<FileUtil::IOFile>(file_path, "rb");
|
||||
|
||||
if (!file->IsOpen()) {
|
||||
// High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list).
|
||||
const u32 shared_data_archive = 0x0004009B;
|
||||
const u32 system_data_archive = 0x000400DB;
|
||||
|
||||
// Low Title IDs.
|
||||
const u32 mii_data = 0x00010202;
|
||||
const u32 region_manifest = 0x00010402;
|
||||
const u32 ng_word_list = 0x00010302;
|
||||
|
||||
LOG_DEBUG(Service_FS, "Full Path: %s. Category: 0x%X. Path: 0x%X.", path.DebugStr().c_str(),
|
||||
high, low);
|
||||
|
||||
if (high == shared_data_archive) {
|
||||
if (low == mii_data) {
|
||||
LOG_ERROR(Service_FS, "Failed to get a handle for shared data archive: Mii data. ");
|
||||
Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSystemFiles,
|
||||
"Mii data");
|
||||
} else if (low == region_manifest) {
|
||||
LOG_ERROR(Service_FS,
|
||||
"Failed to get a handle for shared data archive: region manifes");
|
||||
Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSystemFiles,
|
||||
"Region manifest");
|
||||
}
|
||||
} else if (high == system_data_archive) {
|
||||
if (low == ng_word_list) {
|
||||
LOG_ERROR(Service_FS,
|
||||
"Failed to get a handle for system data archive: NG bad word list.");
|
||||
Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSystemFiles,
|
||||
"NG bad word list");
|
||||
}
|
||||
}
|
||||
return ResultCode(ErrorDescription::FS_NotFound, ErrorModule::FS, ErrorSummary::NotFound,
|
||||
ErrorLevel::Status);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue