* DiscImageChef.Decoders/SCSI/Modes.cs:

Check for vendor pages not following page format (even if
	  they must).

	* DiscImageChef.Devices/Device/Constructor.cs:
	  Some devices (at least smsc usb-floppy) crash and reset when
	  receiving ata over the ATA PASS-THROUGH scsi command. This
	  will check for SCSI compliance first giving devices time to
	  reset.

	* DiscImageChef.Devices/Device/ScsiCommands.cs:
	  Some devices (smsc usb floppies) return the real command
	  result size disregarding allocation length and generating a
	  buffer overflow.

	* DiscImageChef.Devices/Enums.cs:
	  Added some vendor commands for Plextor and HL-DT-ST devices.

	* DiscImageChef/Commands/DeviceInfo.cs:
	  Mode sense should be written even if it can't be decoded.
This commit is contained in:
2015-11-05 06:50:02 +00:00
parent 2f6eaa2393
commit b3bbc5dbe5
2 changed files with 14 additions and 0 deletions

View File

@@ -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;