bad = rl(bufrdb + 4);
if (bad) {
+ if (bad * hfd->ci.blocksize > FILESYS_MAX_BLOCKSIZE)
+ return 0;
hdf_read_rdb(hfd, bufrdb2, bad * hfd->ci.blocksize, hfd->ci.blocksize);
if (bufrdb2[0] != 0xBA || bufrdb2[1] != 0xD1)
return 0;
return -2;
}
+ if (hfd->ci.blocksize > FILESYS_MAX_BLOCKSIZE) {
+ write_log(_T("failed, too large block size %d\n"), hfd->ci.blocksize);
+ return -2;
+ }
+
for (rdblock = 0; rdblock < lastblock; rdblock++) {
hdf_read_rdb (hfd, bufrdb, rdblock * hfd->ci.blocksize, hfd->ci.blocksize);
if (rdblock == 0 && bufrdb[0] == 0xBA && bufrdb[1] == 0xBE) {
extern struct hardfiledata *get_hardfile_data(int nr);
extern struct hardfiledata *get_hardfile_data_controller(int nr);
-#define FILESYS_MAX_BLOCKSIZE 2048
+#define FILESYS_MAX_BLOCKSIZE 8192
extern int hdf_open (struct hardfiledata *hfd);
extern int hdf_open (struct hardfiledata *hfd, const TCHAR *altname);
extern int hdf_dup (struct hardfiledata *dhfd, const struct hardfiledata *shfd);