diff --git a/exfat2img/exfat2img.c b/exfat2img/exfat2img.c index 81e86d2f12b4da5132e9b1e5b6fe54bcba53d104..12a8979b71a235488fcdc81df2517245f53d4679 100644 --- a/exfat2img/exfat2img.c +++ b/exfat2img/exfat2img.c @@ -319,7 +319,7 @@ static int read_file_dentry_set(struct exfat_de_iter *iter, if (!node) return -ENOMEM; - for (i = 2; i <= file_de->file_num_ext; i++) { + for (i = 2; i <= MIN(file_de->file_num_ext, 1 + MAX_NAME_DENTRIES); i++) { ret = exfat_de_iter_get(iter, i, &dentry); if (ret || dentry->type != EXFAT_NAME) break; diff --git a/fsck/fsck.c b/fsck/fsck.c index 8af0d601ea1af090a161c48ef952dfe16aaf84cb..fe360254615429e5b096410d1ceeedc404c72400 100644 --- a/fsck/fsck.c +++ b/fsck/fsck.c @@ -856,7 +856,7 @@ static int read_file_dentry_set(struct exfat_de_iter *iter, if (!node) return -ENOMEM; - for (i = 2; i <= file_de->file_num_ext; i++) { + for (i = 2; i <= MIN(file_de->file_num_ext, 1 + MAX_NAME_DENTRIES); i++) { ret = exfat_de_iter_get(iter, i, &dentry); if (ret || dentry->type != EXFAT_NAME) { if (i > 2 && repair_file_ask(iter, NULL, ER_DE_NAME, diff --git a/include/exfat_ondisk.h b/include/exfat_ondisk.h index d1786bf05f3dc19dac5067207d472ad63522dd9e..fececd0d11994c41a82658555f9eba6f32e726c3 100644 --- a/include/exfat_ondisk.h +++ b/include/exfat_ondisk.h @@ -40,6 +40,7 @@ /* exFAT allows 8388608(256MB) directory entries */ #define MAX_EXFAT_DENTRIES 8388608 #define MIN_FILE_DENTRIES 3 +#define MAX_NAME_DENTRIES 17 /* dentry types */ #define MSDOS_DELETED 0xE5 /* deleted mark */