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);
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;
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;
}
#endif
-