Fix overflows in ATA and SCSI encoders.

This commit is contained in:
2018-12-23 23:51:40 +00:00
parent 4356625f92
commit f9ee7bf764
2 changed files with 8 additions and 4 deletions

View File

@@ -3574,8 +3574,12 @@ namespace DiscImageChef.Decoders.ATA
static byte[] ScrambleATAString(string str, int length)
{
byte[] bytes = Encoding.ASCII.GetBytes(str);
byte[] buf = new byte[length];
for(int i = 0; i < length; i++) buf[i] = 0x20;
if(str is null) return buf;
byte[] bytes = Encoding.ASCII.GetBytes(str);
Array.Copy(bytes, 0, buf, 0, bytes.Length);
return buf;
}

View File

@@ -357,19 +357,19 @@ namespace DiscImageChef.Decoders.SCSI
if(decoded.VendorIdentification != null)
{
length = 16;
Array.Copy(decoded.VendorIdentification, 0, buffer, 8, 8);
Array.Copy(decoded.VendorIdentification, 0, buffer, 8, decoded.VendorIdentification.Length >= 8 ? 8 : decoded.VendorIdentification.Length);
}
if(decoded.ProductIdentification != null)
{
length = 32;
Array.Copy(decoded.ProductIdentification, 0, buffer, 16, 16);
Array.Copy(decoded.ProductIdentification, 0, buffer, 16, decoded.ProductIdentification.Length >= 16 ? 16 : decoded.ProductIdentification.Length);
}
if(decoded.ProductRevisionLevel != null)
{
length = 36;
Array.Copy(decoded.ProductRevisionLevel, 0, buffer, 32, 4);
Array.Copy(decoded.ProductRevisionLevel, 0, buffer, 32, decoded.ProductRevisionLevel.Length >= 4 ? 4 : decoded.ProductRevisionLevel.Length);
}
if(decoded.Seagate_DriveSerialNumber != null)