From f9ee7bf764d1cee6f45e38c4c77c149c380e1ff8 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 23 Dec 2018 23:51:40 +0000 Subject: [PATCH] Fix overflows in ATA and SCSI encoders. --- ATA/Identify.cs | 6 +++++- SCSI/Inquiry.cs | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ATA/Identify.cs b/ATA/Identify.cs index c76210b..346a67b 100644 --- a/ATA/Identify.cs +++ b/ATA/Identify.cs @@ -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; } diff --git a/SCSI/Inquiry.cs b/SCSI/Inquiry.cs index 4649eb0..0073c84 100644 --- a/SCSI/Inquiry.cs +++ b/SCSI/Inquiry.cs @@ -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)