From 4087a2a2d7d3fa970f0dd3e5f2a82d5a94b84aef Mon Sep 17 00:00:00 2001 From: d0k3 Date: Wed, 7 Mar 2018 01:22:15 +0100 Subject: [PATCH] Stricter checking for ExeFS files fixes #321 --- arm9/source/game/exefs.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arm9/source/game/exefs.c b/arm9/source/game/exefs.c index 433bd67..06ca939 100644 --- a/arm9/source/game/exefs.c +++ b/arm9/source/game/exefs.c @@ -9,9 +9,11 @@ u32 ValidateExeFsHeader(ExeFsHeader* exefs, u32 size) { ExeFsFileHeader* file = exefs->files + i; u8* hash = exefs->hashes[9 - i]; 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 < data_size) return 1; // overlapping data, 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); n_files++; }