mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Fix overflow with small sectors in Apple Partition Map.
This commit is contained in:
@@ -185,7 +185,7 @@ namespace DiscImageChef.Partitions
|
|||||||
uint skipDdm;
|
uint skipDdm;
|
||||||
|
|
||||||
// If sector is bigger than 512
|
// If sector is bigger than 512
|
||||||
if(sectorSize > 512)
|
if(ddmSector.Length > 512)
|
||||||
{
|
{
|
||||||
byte[] tmp = new byte[512];
|
byte[] tmp = new byte[512];
|
||||||
Array.Copy(ddmSector, 512, tmp, 0, 512);
|
Array.Copy(ddmSector, 512, tmp, 0, 512);
|
||||||
@@ -341,19 +341,19 @@ namespace DiscImageChef.Partitions
|
|||||||
struct AppleDriverDescriptorMap
|
struct AppleDriverDescriptorMap
|
||||||
{
|
{
|
||||||
/// <summary>Signature <see cref="DDM_MAGIC" /></summary>
|
/// <summary>Signature <see cref="DDM_MAGIC" /></summary>
|
||||||
public ushort sbSig;
|
public readonly ushort sbSig;
|
||||||
/// <summary>Byter per sector</summary>
|
/// <summary>Byter per sector</summary>
|
||||||
public ushort sbBlockSize;
|
public readonly ushort sbBlockSize;
|
||||||
/// <summary>Sectors of the disk</summary>
|
/// <summary>Sectors of the disk</summary>
|
||||||
public uint sbBlocks;
|
public readonly uint sbBlocks;
|
||||||
/// <summary>Device type</summary>
|
/// <summary>Device type</summary>
|
||||||
public ushort sbDevType;
|
public readonly ushort sbDevType;
|
||||||
/// <summary>Device ID</summary>
|
/// <summary>Device ID</summary>
|
||||||
public ushort sbDevId;
|
public readonly ushort sbDevId;
|
||||||
/// <summary>Reserved</summary>
|
/// <summary>Reserved</summary>
|
||||||
public uint sbData;
|
public readonly uint sbData;
|
||||||
/// <summary>Number of entries of the driver descriptor</summary>
|
/// <summary>Number of entries of the driver descriptor</summary>
|
||||||
public ushort sbDrvrCount;
|
public readonly ushort sbDrvrCount;
|
||||||
/// <summary>Entries of the driver descriptor</summary>
|
/// <summary>Entries of the driver descriptor</summary>
|
||||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 61)]
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 61)]
|
||||||
public AppleDriverEntry[] sbMap;
|
public AppleDriverEntry[] sbMap;
|
||||||
@@ -363,32 +363,32 @@ namespace DiscImageChef.Partitions
|
|||||||
struct AppleDriverEntry
|
struct AppleDriverEntry
|
||||||
{
|
{
|
||||||
/// <summary>First sector of the driver</summary>
|
/// <summary>First sector of the driver</summary>
|
||||||
public uint ddBlock;
|
public readonly uint ddBlock;
|
||||||
/// <summary>Size in 512bytes sectors of the driver</summary>
|
/// <summary>Size in 512bytes sectors of the driver</summary>
|
||||||
public ushort ddSize;
|
public readonly ushort ddSize;
|
||||||
/// <summary>Operating system (MacOS = 1)</summary>
|
/// <summary>Operating system (MacOS = 1)</summary>
|
||||||
public ushort ddType;
|
public readonly ushort ddType;
|
||||||
}
|
}
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct AppleOldDevicePartitionMap
|
struct AppleOldDevicePartitionMap
|
||||||
{
|
{
|
||||||
/// <summary>Signature <see cref="APM_MAGIC_OLD" /></summary>
|
/// <summary>Signature <see cref="APM_MAGIC_OLD" /></summary>
|
||||||
public ushort pdSig;
|
public readonly ushort pdSig;
|
||||||
/// <summary>Entries of the driver descriptor</summary>
|
/// <summary>Entries of the driver descriptor</summary>
|
||||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)]
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)]
|
||||||
public AppleMapOldPartitionEntry[] pdMap;
|
public readonly AppleMapOldPartitionEntry[] pdMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct AppleMapOldPartitionEntry
|
struct AppleMapOldPartitionEntry
|
||||||
{
|
{
|
||||||
/// <summary>First sector of the partition</summary>
|
/// <summary>First sector of the partition</summary>
|
||||||
public uint pdStart;
|
public readonly uint pdStart;
|
||||||
/// <summary>Number of sectors of the partition</summary>
|
/// <summary>Number of sectors of the partition</summary>
|
||||||
public uint pdSize;
|
public readonly uint pdSize;
|
||||||
/// <summary>Partition type</summary>
|
/// <summary>Partition type</summary>
|
||||||
public uint pdFSID;
|
public readonly uint pdFSID;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
@@ -424,47 +424,47 @@ namespace DiscImageChef.Partitions
|
|||||||
struct AppleMapPartitionEntry
|
struct AppleMapPartitionEntry
|
||||||
{
|
{
|
||||||
/// <summary>Signature <see cref="APM_MAGIC" /></summary>
|
/// <summary>Signature <see cref="APM_MAGIC" /></summary>
|
||||||
public ushort signature;
|
public readonly ushort signature;
|
||||||
/// <summary>Reserved</summary>
|
/// <summary>Reserved</summary>
|
||||||
public ushort reserved1;
|
public readonly ushort reserved1;
|
||||||
/// <summary>Number of entries on the partition map, each one sector</summary>
|
/// <summary>Number of entries on the partition map, each one sector</summary>
|
||||||
public uint entries;
|
public readonly uint entries;
|
||||||
/// <summary>First sector of the partition</summary>
|
/// <summary>First sector of the partition</summary>
|
||||||
public uint start;
|
public readonly uint start;
|
||||||
/// <summary>Number of sectos of the partition</summary>
|
/// <summary>Number of sectos of the partition</summary>
|
||||||
public uint sectors;
|
public readonly uint sectors;
|
||||||
/// <summary>Partition name, 32 bytes, null-padded</summary>
|
/// <summary>Partition name, 32 bytes, null-padded</summary>
|
||||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
||||||
public byte[] name;
|
public readonly byte[] name;
|
||||||
/// <summary>Partition type. 32 bytes, null-padded</summary>
|
/// <summary>Partition type. 32 bytes, null-padded</summary>
|
||||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
||||||
public byte[] type;
|
public readonly byte[] type;
|
||||||
/// <summary>First sector of the data area</summary>
|
/// <summary>First sector of the data area</summary>
|
||||||
public uint first_data_block;
|
public readonly uint first_data_block;
|
||||||
/// <summary>Number of sectors of the data area</summary>
|
/// <summary>Number of sectors of the data area</summary>
|
||||||
public uint data_sectors;
|
public readonly uint data_sectors;
|
||||||
/// <summary>Partition flags</summary>
|
/// <summary>Partition flags</summary>
|
||||||
public uint flags;
|
public readonly uint flags;
|
||||||
/// <summary>First sector of the boot code</summary>
|
/// <summary>First sector of the boot code</summary>
|
||||||
public uint first_boot_block;
|
public readonly uint first_boot_block;
|
||||||
/// <summary>Size in bytes of the boot code</summary>
|
/// <summary>Size in bytes of the boot code</summary>
|
||||||
public uint boot_size;
|
public readonly uint boot_size;
|
||||||
/// <summary>Load address of the boot code</summary>
|
/// <summary>Load address of the boot code</summary>
|
||||||
public uint load_address;
|
public readonly uint load_address;
|
||||||
/// <summary>Load address of the boot code</summary>
|
/// <summary>Load address of the boot code</summary>
|
||||||
public uint load_address2;
|
public readonly uint load_address2;
|
||||||
/// <summary>Entry point of the boot code</summary>
|
/// <summary>Entry point of the boot code</summary>
|
||||||
public uint entry_point;
|
public readonly uint entry_point;
|
||||||
/// <summary>Entry point of the boot code</summary>
|
/// <summary>Entry point of the boot code</summary>
|
||||||
public uint entry_point2;
|
public readonly uint entry_point2;
|
||||||
/// <summary>Boot code checksum</summary>
|
/// <summary>Boot code checksum</summary>
|
||||||
public uint checksum;
|
public readonly uint checksum;
|
||||||
/// <summary>Processor type, 16 bytes, null-padded</summary>
|
/// <summary>Processor type, 16 bytes, null-padded</summary>
|
||||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
|
||||||
public byte[] processor;
|
public readonly byte[] processor;
|
||||||
/// <summary>Boot arguments</summary>
|
/// <summary>Boot arguments</summary>
|
||||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
||||||
public uint[] boot_arguments;
|
public readonly uint[] boot_arguments;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user