diff --git a/DiscImageChef/Plugins/AppleHFS.cs b/DiscImageChef/Plugins/AppleHFS.cs index 97448ecef..e7dcdf77a 100644 --- a/DiscImageChef/Plugins/AppleHFS.cs +++ b/DiscImageChef/Plugins/AppleHFS.cs @@ -60,6 +60,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte[] mdb_sector = imagePlugin.ReadSector(2 + partitionOffset); UInt16 drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0); diff --git a/DiscImageChef/Plugins/AppleHFSPlus.cs b/DiscImageChef/Plugins/AppleHFSPlus.cs index 9f5b31866..c583d6f78 100644 --- a/DiscImageChef/Plugins/AppleHFSPlus.cs +++ b/DiscImageChef/Plugins/AppleHFSPlus.cs @@ -59,6 +59,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + UInt16 drSigWord; UInt16 xdrStABNt; UInt16 drAlBlSt; diff --git a/DiscImageChef/Plugins/AppleMFS.cs b/DiscImageChef/Plugins/AppleMFS.cs index 7b1178814..25d239abd 100644 --- a/DiscImageChef/Plugins/AppleMFS.cs +++ b/DiscImageChef/Plugins/AppleMFS.cs @@ -59,6 +59,9 @@ namespace DiscImageChef.Plugins { UInt16 drSigWord; + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte[] mdb_sector = imagePlugin.ReadSector(2 + partitionOffset); drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0x000); diff --git a/DiscImageChef/Plugins/BFS.cs b/DiscImageChef/Plugins/BFS.cs index fa6aca4f3..e5ec585a8 100644 --- a/DiscImageChef/Plugins/BFS.cs +++ b/DiscImageChef/Plugins/BFS.cs @@ -65,6 +65,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + UInt32 magic; UInt32 magic_be; diff --git a/DiscImageChef/Plugins/FAT.cs b/DiscImageChef/Plugins/FAT.cs index bb868f9f3..4c20dfc50 100644 --- a/DiscImageChef/Plugins/FAT.cs +++ b/DiscImageChef/Plugins/FAT.cs @@ -54,6 +54,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte media_descriptor; // Not present on DOS <= 3, present on TOS but != of first FAT entry byte fats_no; // Must be 1 or 2. Dunno if it can be 0 in the wild, but it CANNOT BE bigger than 2 byte[] fat32_signature = new byte[8]; // "FAT32 " diff --git a/DiscImageChef/Plugins/FFS.cs b/DiscImageChef/Plugins/FFS.cs index b77a5bcd5..f4fe38677 100644 --- a/DiscImageChef/Plugins/FFS.cs +++ b/DiscImageChef/Plugins/FFS.cs @@ -53,6 +53,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + UInt32 magic; uint sb_size_in_sectors; byte[] ufs_sb_sectors; diff --git a/DiscImageChef/Plugins/HPFS.cs b/DiscImageChef/Plugins/HPFS.cs index 0714d4331..c13e22679 100644 --- a/DiscImageChef/Plugins/HPFS.cs +++ b/DiscImageChef/Plugins/HPFS.cs @@ -54,6 +54,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + UInt32 magic1, magic2; byte[] hpfs_sb_sector = imagePlugin.ReadSector(16 + partitionOffset); // Seek to superblock, on logical sector 16 diff --git a/DiscImageChef/Plugins/MinixFS.cs b/DiscImageChef/Plugins/MinixFS.cs index 10993acd7..aeb96f9f2 100644 --- a/DiscImageChef/Plugins/MinixFS.cs +++ b/DiscImageChef/Plugins/MinixFS.cs @@ -75,6 +75,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + UInt16 magic; byte[] minix_sb_sector = imagePlugin.ReadSector(2 + partitionOffset); diff --git a/DiscImageChef/Plugins/NTFS.cs b/DiscImageChef/Plugins/NTFS.cs index eafb0acaf..be83a2776 100644 --- a/DiscImageChef/Plugins/NTFS.cs +++ b/DiscImageChef/Plugins/NTFS.cs @@ -53,6 +53,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte[] eigth_bytes = new byte[8]; byte signature1, fats_no; UInt16 spfat, signature2; diff --git a/DiscImageChef/Plugins/ODS.cs b/DiscImageChef/Plugins/ODS.cs index 155b6b167..c5d337179 100644 --- a/DiscImageChef/Plugins/ODS.cs +++ b/DiscImageChef/Plugins/ODS.cs @@ -60,6 +60,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + if (imagePlugin.GetSectorSize() < 512) return false; diff --git a/DiscImageChef/Plugins/Opera.cs b/DiscImageChef/Plugins/Opera.cs index 9c799eb4b..8dff8fc16 100644 --- a/DiscImageChef/Plugins/Opera.cs +++ b/DiscImageChef/Plugins/Opera.cs @@ -53,6 +53,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte[] sb_sector = imagePlugin.ReadSector(0 + partitionOffset); byte record_type; diff --git a/DiscImageChef/Plugins/PCEngine.cs b/DiscImageChef/Plugins/PCEngine.cs index a096bcb30..56ef54d83 100644 --- a/DiscImageChef/Plugins/PCEngine.cs +++ b/DiscImageChef/Plugins/PCEngine.cs @@ -52,6 +52,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte[] system_descriptor = new byte[23]; byte[] sector = imagePlugin.ReadSector(1 + partitionOffset); diff --git a/DiscImageChef/Plugins/SolarFS.cs b/DiscImageChef/Plugins/SolarFS.cs index 2b0af3c2b..96b38ee5c 100644 --- a/DiscImageChef/Plugins/SolarFS.cs +++ b/DiscImageChef/Plugins/SolarFS.cs @@ -53,6 +53,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte signature; // 0x29 string fs_type; // "SOL_FS " diff --git a/DiscImageChef/Plugins/SysV.cs b/DiscImageChef/Plugins/SysV.cs index b0901e948..81647bafd 100644 --- a/DiscImageChef/Plugins/SysV.cs +++ b/DiscImageChef/Plugins/SysV.cs @@ -68,6 +68,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + UInt32 magic; string s_fname, s_fpack; UInt16 s_nfree, s_ninode; diff --git a/DiscImageChef/Plugins/UNIXBFS.cs b/DiscImageChef/Plugins/UNIXBFS.cs index 54dd19e86..cb93aa1d5 100644 --- a/DiscImageChef/Plugins/UNIXBFS.cs +++ b/DiscImageChef/Plugins/UNIXBFS.cs @@ -55,6 +55,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + UInt32 magic; magic = BitConverter.ToUInt32(imagePlugin.ReadSector(0 + partitionOffset), 0); diff --git a/DiscImageChef/Plugins/ext2FS.cs b/DiscImageChef/Plugins/ext2FS.cs index 1cf6aa5ae..0a209ed99 100644 --- a/DiscImageChef/Plugins/ext2FS.cs +++ b/DiscImageChef/Plugins/ext2FS.cs @@ -53,6 +53,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte[] sb_sector = imagePlugin.ReadSector(2 + partitionOffset); UInt16 magic = BitConverter.ToUInt16(sb_sector, 0x038); diff --git a/DiscImageChef/Plugins/extFS.cs b/DiscImageChef/Plugins/extFS.cs index a4e58b795..fd182b579 100644 --- a/DiscImageChef/Plugins/extFS.cs +++ b/DiscImageChef/Plugins/extFS.cs @@ -53,6 +53,9 @@ namespace DiscImageChef.Plugins public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionOffset) { + if ((2 + partitionOffset) >= imagePlugin.GetSectors()) + return false; + byte[] sb_sector = imagePlugin.ReadSector(2 + partitionOffset); // Superblock resides at 0x400 UInt16 magic = BitConverter.ToUInt16(sb_sector, 0x038); // Here should reside magic number