X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/05a1b863a66bf72b26e5d87570c4e0e61b9736cd..967a259ceeebe8917dec488303d084398e2f462a:/GRUB2/grub-2.04/grub-core/fs/fat.c diff --git a/GRUB2/grub-2.04/grub-core/fs/fat.c b/GRUB2/grub-2.04/grub-core/fs/fat.c index 2b26a8c..6d4ce0d 100644 --- a/GRUB2/grub-2.04/grub-core/fs/fat.c +++ b/GRUB2/grub-2.04/grub-core/fs/fat.c @@ -558,7 +558,7 @@ grub_fat_read_data (grub_disk_t disk, grub_fshelp_node_t node, if (next_cluster >= node->data->cluster_eof_mark) return ret; - if (next_cluster < 2 || next_cluster >= node->data->num_clusters) + if (next_cluster < 2 || (next_cluster - 2) >= node->data->num_clusters) { grub_error (GRUB_ERR_BAD_FS, "invalid cluster %u", next_cluster); @@ -964,6 +964,12 @@ grub_fat_dir (grub_device_t device, const char *path, grub_fs_dir_hook_t hook, info.dir = !! (ctxt.dir.attr & GRUB_FAT_ATTR_DIRECTORY); info.case_insensitive = 1; + + #ifdef MODE_EXFAT + if (!info.dir) + info.size = ctxt.dir.file_size; + #endif + #ifdef MODE_EXFAT if (!ctxt.dir.have_stream) continue; @@ -1409,7 +1415,7 @@ int grub_fat_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_i return 0; } - if (next_cluster < 2 || next_cluster >= node->data->num_clusters) + if (next_cluster < 2 || (next_cluster - 2) >= node->data->num_clusters) { grub_error (GRUB_ERR_BAD_FS, "invalid cluster %u", next_cluster); return -1; @@ -1445,4 +1451,3 @@ END: } #endif -