diff --git a/SCSI/Modes/Mode10.cs b/SCSI/Modes/Mode10.cs index eaea48733..a405edc01 100644 --- a/SCSI/Modes/Mode10.cs +++ b/SCSI/Modes/Mode10.cs @@ -204,11 +204,12 @@ namespace Aaru.Decoders.SCSI if(isSubpage) { pg.PageResponse = new byte[(modeResponse[offset + 2] << 8) + modeResponse[offset + 3] + 4]; + int copyLen = pg.PageResponse.Length; if(pg.PageResponse.Length + offset > modeResponse.Length) - return decoded; + copyLen = modeResponse.Length - offset; - Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length); + Array.Copy(modeResponse, offset, pg.PageResponse, 0, copyLen); pg.Page = (byte)(modeResponse[offset] & 0x3F); pg.Subpage = modeResponse[offset + 1]; offset += pg.PageResponse.Length; @@ -216,11 +217,12 @@ namespace Aaru.Decoders.SCSI else { pg.PageResponse = new byte[modeResponse[offset + 1] + 2]; + int copyLen = pg.PageResponse.Length; if(pg.PageResponse.Length + offset > modeResponse.Length) - return decoded; + copyLen = modeResponse.Length - offset; - Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length); + Array.Copy(modeResponse, offset, pg.PageResponse, 0, copyLen); pg.Page = (byte)(modeResponse[offset] & 0x3F); pg.Subpage = 0; offset += pg.PageResponse.Length; diff --git a/SCSI/Modes/Mode6.cs b/SCSI/Modes/Mode6.cs index 9d6998333..360190388 100644 --- a/SCSI/Modes/Mode6.cs +++ b/SCSI/Modes/Mode6.cs @@ -149,11 +149,12 @@ namespace Aaru.Decoders.SCSI break; pg.PageResponse = new byte[(modeResponse[offset + 2] << 8) + modeResponse[offset + 3] + 4]; + int copyLen = pg.PageResponse.Length; if(pg.PageResponse.Length + offset > modeResponse.Length) - return decoded; + copyLen = modeResponse.Length - offset; - Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length); + Array.Copy(modeResponse, offset, pg.PageResponse, 0, copyLen); pg.Page = (byte)(modeResponse[offset] & 0x3F); pg.Subpage = modeResponse[offset + 1]; offset += pg.PageResponse.Length; @@ -164,11 +165,12 @@ namespace Aaru.Decoders.SCSI break; pg.PageResponse = new byte[modeResponse[offset + 1] + 2]; + int copyLen = pg.PageResponse.Length; if(pg.PageResponse.Length + offset > modeResponse.Length) - return decoded; + copyLen = modeResponse.Length - offset; - Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length); + Array.Copy(modeResponse, offset, pg.PageResponse, 0, copyLen); pg.Page = (byte)(modeResponse[offset] & 0x3F); pg.Subpage = 0; offset += pg.PageResponse.Length;