mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-11-26 22:13:12 +00:00
FileSys::Ticket::Load: Return error if signature type does not match (#4339)
* FileSys::Ticket::Load: Return error if signature type does not match * fixup! FileSys::Ticket::Load: Return error if signature type does not match
This commit is contained in:
parent
0df32275a7
commit
b01b94d843
|
@ -33,7 +33,7 @@ inline u32 GetSignatureSize(u32 signature_type) {
|
||||||
return 0x3C;
|
return 0x3C;
|
||||||
}
|
}
|
||||||
|
|
||||||
UNREACHABLE();
|
LOG_ERROR(Common_Filesystem, "Tried to read ticket with bad signature {}", signature_type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,9 @@ Loader::ResultStatus Ticket::Load(const std::vector<u8> file_data, std::size_t o
|
||||||
|
|
||||||
// Signature lengths are variable, and the body follows the signature
|
// Signature lengths are variable, and the body follows the signature
|
||||||
u32 signature_size = GetSignatureSize(signature_type);
|
u32 signature_size = GetSignatureSize(signature_type);
|
||||||
|
if (signature_size == 0) {
|
||||||
|
return Loader::ResultStatus::Error;
|
||||||
|
}
|
||||||
|
|
||||||
// The ticket body start position is rounded to the nearest 0x40 after the signature
|
// The ticket body start position is rounded to the nearest 0x40 after the signature
|
||||||
std::size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40);
|
std::size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40);
|
||||||
|
|
|
@ -42,6 +42,9 @@ Loader::ResultStatus TitleMetadata::Load(const std::vector<u8> file_data, std::s
|
||||||
|
|
||||||
// Signature lengths are variable, and the body follows the signature
|
// Signature lengths are variable, and the body follows the signature
|
||||||
u32 signature_size = GetSignatureSize(signature_type);
|
u32 signature_size = GetSignatureSize(signature_type);
|
||||||
|
if (signature_size == 0) {
|
||||||
|
return Loader::ResultStatus::Error;
|
||||||
|
}
|
||||||
|
|
||||||
// The TMD body start position is rounded to the nearest 0x40 after the signature
|
// The TMD body start position is rounded to the nearest 0x40 after the signature
|
||||||
std::size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40);
|
std::size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40);
|
||||||
|
@ -84,6 +87,9 @@ Loader::ResultStatus TitleMetadata::Save(const std::string& file_path) {
|
||||||
|
|
||||||
// Signature lengths are variable, and the body follows the signature
|
// Signature lengths are variable, and the body follows the signature
|
||||||
u32 signature_size = GetSignatureSize(signature_type);
|
u32 signature_size = GetSignatureSize(signature_type);
|
||||||
|
if (signature_size == 0) {
|
||||||
|
return Loader::ResultStatus::Error;
|
||||||
|
}
|
||||||
|
|
||||||
if (!file.WriteBytes(tmd_signature.data(), signature_size))
|
if (!file.WriteBytes(tmd_signature.data(), signature_size))
|
||||||
return Loader::ResultStatus::Error;
|
return Loader::ResultStatus::Error;
|
||||||
|
|
Loading…
Reference in a new issue