forked from Mirror/GodMode9
parent
67e19ad574
commit
4087a2a2d7
@ -9,9 +9,11 @@ u32 ValidateExeFsHeader(ExeFsHeader* exefs, u32 size) {
|
|||||||
ExeFsFileHeader* file = exefs->files + i;
|
ExeFsFileHeader* file = exefs->files + i;
|
||||||
u8* hash = exefs->hashes[9 - i];
|
u8* hash = exefs->hashes[9 - i];
|
||||||
if (file->size == 0) continue;
|
if (file->size == 0) continue;
|
||||||
|
if (!*(file->name)) return 1; // zero filename -> not a valid ExeFS
|
||||||
if (file->offset % NCCH_MEDIA_UNIT) return 1; // not aligned to media unit, failed
|
if (file->offset % NCCH_MEDIA_UNIT) return 1; // not aligned to media unit, failed
|
||||||
if (file->offset < data_size) return 1; // overlapping data, failed
|
if (file->offset < data_size) return 1; // overlapping data, failed
|
||||||
if (memcmp(hash, zeroes, 32) == 0) return 1; // hash not set, failed
|
if (memcmp(hash, zeroes, 32) == 0) return 1; // hash not set, failed
|
||||||
|
if (file->size >= 0xFFFFFE00) return 1; // obviously an improper value, failed
|
||||||
data_size = file->offset + align(file->size, NCCH_MEDIA_UNIT);
|
data_size = file->offset + align(file->size, NCCH_MEDIA_UNIT);
|
||||||
n_files++;
|
n_files++;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user