Prevent trying to save null media tags, and report their presence to stderror.

This commit is contained in:
2019-08-10 14:35:14 +01:00
parent 298ac5969f
commit 44c96f1c04
5 changed files with 29 additions and 4 deletions

View File

@@ -539,7 +539,7 @@ namespace DiscImageChef.Core.Devices.Dumping
sidecar = preSidecar;
}
if(dev.IsUsb)
if(dev.IsUsb && dev.UsbDescriptors != null)
{
dumpLog.WriteLine("Reading USB descriptors.");
UpdateStatus?.Invoke("Reading USB descriptors.");
@@ -559,7 +559,7 @@ namespace DiscImageChef.Core.Devices.Dumping
};
}
if(dev.IsPcmcia)
if(dev.IsPcmcia && dev.Cis != null)
{
dumpLog.WriteLine("Reading PCMCIA CIS.");
UpdateStatus?.Invoke("Reading PCMCIA CIS.");

View File

@@ -1801,6 +1801,12 @@ namespace DiscImageChef.Core.Devices.Dumping
if(!aborted)
foreach(KeyValuePair<MediaTagType, byte[]> tag in mediaTags)
{
if(tag.Value is null)
{
DicConsole.ErrorWriteLine("Error: Tag type {0} is null, skipping...", tag.Key);
continue;
}
ret = outputPlugin.WriteMediaTag(tag.Value, tag.Key);
if(ret || force) continue;
@@ -1873,7 +1879,7 @@ namespace DiscImageChef.Core.Devices.Dumping
from partition in xmlTrack.FileSystemInformation
where partition.FileSystems != null
from fileSystem in partition.FileSystems
select ((ulong)partition.StartSector, fileSystem.Type));
select (partition.StartSector, fileSystem.Type));
if(filesystems.Count > 0)
foreach(var filesystem in filesystems.Select(o => new {o.start, o.type}).Distinct())

View File

@@ -684,6 +684,12 @@ namespace DiscImageChef.Core.Devices.Dumping
if(opticalDisc)
foreach(KeyValuePair<MediaTagType, byte[]> tag in mediaTags)
{
if(tag.Value is null)
{
DicConsole.ErrorWriteLine("Error: Tag type {0} is null, skipping...", tag.Key);
continue;
}
ret = outputPlugin.WriteMediaTag(tag.Value, tag.Key);
if(ret || force) continue;
@@ -698,7 +704,7 @@ namespace DiscImageChef.Core.Devices.Dumping
{
if(!dev.IsRemovable || dev.IsUsb)
{
if(dev.IsUsb)
if(dev.IsUsb && dev.UsbDescriptors != null)
{
UpdateStatus?.Invoke("Reading USB descriptors.");
dumpLog.WriteLine("Reading USB descriptors.");

View File

@@ -883,6 +883,12 @@ namespace DiscImageChef.Core.Devices.Dumping
foreach(KeyValuePair<MediaTagType, byte[]> tag in mediaTags)
{
if(tag.Value is null)
{
DicConsole.ErrorWriteLine("Error: Tag type {0} is null, skipping...", tag.Key);
continue;
}
ret = outputPlugin.WriteMediaTag(tag.Value, tag.Key);
if(ret || force) continue;

View File

@@ -1612,6 +1612,13 @@ namespace DiscImageChef.DiscImages
foreach(KeyValuePair<MediaTagType, byte[]> mediaTag in mediaTags)
{
DataType dataType = GetDataTypeForMediaTag(mediaTag.Key);
if(mediaTag.Value is null)
{
DicConsole.ErrorWriteLine("Tag type {0} is null, skipping...", dataType);
continue;
}
idxEntry = new IndexEntry
{
blockType = BlockType.DataBlock, dataType = dataType, offset = (ulong)imageStream.Position