diff --git a/DiscImageChef.Devices/ChangeLog b/DiscImageChef.Devices/ChangeLog index fbb27a38..2272668f 100644 --- a/DiscImageChef.Devices/ChangeLog +++ b/DiscImageChef.Devices/ChangeLog @@ -1,3 +1,8 @@ +2015-12-04 Natalia Portillo + + * Device/ScsiCommands.cs: + Solved when CD-TEXT is bigger than 1KiB. + 2015-11-24 Natalia Portillo * Device/ScsiCommands.cs: diff --git a/DiscImageChef.Devices/Device/ScsiCommands.cs b/DiscImageChef.Devices/Device/ScsiCommands.cs index ee54dd18..fdc7ae2d 100644 --- a/DiscImageChef.Devices/Device/ScsiCommands.cs +++ b/DiscImageChef.Devices/Device/ScsiCommands.cs @@ -862,10 +862,21 @@ namespace DiscImageChef.Devices uint strctLength = (uint)(((int)tmpBuffer[0] << 8) + tmpBuffer[1] + 2); buffer = new byte[strctLength]; - Array.Copy(tmpBuffer, 0, buffer, 0, buffer.Length); + if (buffer.Length <= tmpBuffer.Length) + { + Array.Copy(tmpBuffer, 0, buffer, 0, buffer.Length); + DicConsole.DebugWriteLine("SCSI Device", "READ TOC/PMA/ATIP took {0} ms.", duration); + return sense; + } + + double tmpDuration = duration; + + lastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out sense); + error = lastError != 0; + + duration += tmpDuration; DicConsole.DebugWriteLine("SCSI Device", "READ TOC/PMA/ATIP took {0} ms.", duration); - return sense; } diff --git a/DiscImageChef/ChangeLog b/DiscImageChef/ChangeLog index 8052c849..ec9b6c80 100644 --- a/DiscImageChef/ChangeLog +++ b/DiscImageChef/ChangeLog @@ -1,3 +1,8 @@ +2015-12-04 Natalia Portillo + + * Commands/MediaInfo.cs: + Solved when CD-TEXT is bigger than 1KiB. + 2015-12-03 Natalia Portillo * Commands/MediaInfo.cs: diff --git a/DiscImageChef/Commands/MediaInfo.cs b/DiscImageChef/Commands/MediaInfo.cs index ec82f9f5..8b634348 100644 --- a/DiscImageChef/Commands/MediaInfo.cs +++ b/DiscImageChef/Commands/MediaInfo.cs @@ -801,7 +801,7 @@ namespace DiscImageChef.Commands DicConsole.WriteLine("PMA:\n{0}", Decoders.CD.PMA.Prettify(cmdBuf)); } - /*sense = dev.ReadCdText(out cmdBuf, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadCdText(out cmdBuf, out senseBuf, dev.Timeout, out duration); if (sense) DicConsole.ErrorWriteLine("READ TOC/PMA/ATIP: CD-TEXT\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); else @@ -809,7 +809,7 @@ namespace DiscImageChef.Commands doWriteFile(outputPrefix, "_cdtext.bin", "SCSI READ TOC/PMA/ATIP", cmdBuf); //if(Decoders.CD.CDTextOnLeadIn.Decode(cmdBuf).HasValue) // DicConsole.WriteLine("CD-TEXT on Lead-In:\n{0}", Decoders.CD.CDTextOnLeadIn.Prettify(cmdBuf)); - }*/ + } } } #endregion CDs