diff --git a/ChangeLog b/ChangeLog index 7480dda..3bd6714 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-11-05 Natalia Portillo + + * SCSI/Modes.cs: + Check for vendor pages not following page format (even if + they must). + 2015-11-02 Natalia Portillo * DiscImageChef.Decoders.csproj: diff --git a/SCSI/Modes.cs b/SCSI/Modes.cs index f458316..9548f24 100644 --- a/SCSI/Modes.cs +++ b/SCSI/Modes.cs @@ -5904,6 +5904,10 @@ namespace DiscImageChef.Decoders.SCSI if (isSubpage) { pg.PageResponse = new byte[(modeResponse[offset + 2] << 8) + modeResponse[offset + 3] + 4]; + + if((pg.PageResponse.Length + offset) > modeResponse.Length) + return decoded; + Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length); pg.Page = (byte)(modeResponse[offset] & 0x3F); pg.Subpage = modeResponse[offset + 1]; @@ -5912,6 +5916,10 @@ namespace DiscImageChef.Decoders.SCSI else { pg.PageResponse = new byte[modeResponse[offset + 1] + 2]; + + if((pg.PageResponse.Length + offset) > modeResponse.Length) + return decoded; + Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length); pg.Page = (byte)(modeResponse[offset] & 0x3F); pg.Subpage = 0;