From 9b21dbb5b78417b5e4078eee40357b932be6526d Mon Sep 17 00:00:00 2001 From: d0k3 Date: Sun, 10 Apr 2016 16:02:08 +0200 Subject: [PATCH] Enforce minimum size for mountable NAND dumps --- source/fatfs/image.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/fatfs/image.c b/source/fatfs/image.c index 23a187a..15e85fe 100644 --- a/source/fatfs/image.c +++ b/source/fatfs/image.c @@ -50,7 +50,8 @@ u32 IdentifyImage(const char* path) { return 0; } f_close(&file); - if ((getbe32(header + 0x100) == 0x4E435344) && (getbe64(header + 0x110) == (u64) 0x0104030301000000) && (getbe64(header + 0x108) == (u64) 0)) { + if ((getbe32(header + 0x100) == 0x4E435344) && (getbe64(header + 0x110) == (u64) 0x0104030301000000) && + (getbe64(header + 0x108) == (u64) 0) && (fsize >= 0x8FC8000)) { return IMG_NAND; } else if (getbe16(header + 0x1FE) == 0x55AA) { // migt be FAT or MBR if ((strncmp((char*) header + 0x36, "FAT12 ", 8) == 0) || (strncmp((char*) header + 0x36, "FAT16 ", 8) == 0) || @@ -58,7 +59,7 @@ u32 IdentifyImage(const char* path) { return IMG_FAT; // this is an actual FAT header } else if (((getle32(header + 0x1BE + 0x8) + getle32(header + 0x1BE + 0xC)) < (fsize / 0x200)) && // check file size (getle32(header + 0x1BE + 0x8) > 0) && (getle32(header + 0x1BE + 0xC) >= 0x800) && // check first partition sanity - ((header[0x1BE + 0x4] == 0x1) || (header[0x1BE + 0x4] == 0x4) || (header[0x1BE + 0x4] == 0x6) || // check filesystem type + ((header[0x1BE + 0x4] == 0x1) || (header[0x1BE + 0x4] == 0x4) || (header[0x1BE + 0x4] == 0x6) || // filesystem type (header[0x1BE + 0x4] == 0xB) || (header[0x1BE + 0x4] == 0xC) || (header[0x1BE + 0x4] == 0xE))) { return IMG_FAT; // this might be an MBR -> give it the benefit of doubt }