Do not allow dumping or converting to image formats that do not properly support hidden tracks when there is a hidden track in the media. Fixes #719

This commit is contained in:
2022-12-06 12:27:35 +00:00
parent 40ed1b19e2
commit 70d82990b1
4 changed files with 26 additions and 2 deletions

View File

@@ -565,6 +565,14 @@ namespace Aaru.Core.Devices.Dumping
_dumpLog.WriteLine("Disc contains a hidden track...");
UpdateStatus?.Invoke("Disc contains a hidden track...");
if(!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities.CanStoreHiddenTracks))
{
StoppingErrorMessage?.Invoke("Output format does not properly support storing hidden tracks, this will end in a loss of data, not continuing...");
_dumpLog.WriteLine("Output format does not properly support storing hidden tracks, this will end in a loss of data, not continuing...");
return;
}
List<Track> trkList = new List<Track>
{
new Track

View File

@@ -56,7 +56,8 @@ namespace Aaru.DiscImages
OpticalImageCapabilities.CanStoreMultipleTracks |
OpticalImageCapabilities.CanStoreNotCdSessions |
OpticalImageCapabilities.CanStoreNotCdTracks |
OpticalImageCapabilities.CanStoreIndexes;
OpticalImageCapabilities.CanStoreIndexes |
OpticalImageCapabilities.CanStoreHiddenTracks;
/// <inheritdoc />
public ImageInfo Info => _imageInfo;
/// <inheritdoc />

View File

@@ -633,6 +633,21 @@ namespace Aaru.Commands.Image
AaruConsole.ErrorWriteLine("Output format does not support sessions, this will end in a loss of data, continuing...");*/
}
if((outputFormat as IWritableOpticalImage)?.OpticalCapabilities.HasFlag(OpticalImageCapabilities.
CanStoreHiddenTracks) != true &&
(inputFormat as IOpticalMediaImage)?.Tracks?.Any(t => t.TrackSequence == 0) == true)
{
// TODO: Disabled until 6.0
/*if(!_force)
{*/
AaruConsole.ErrorWriteLine("Output format does not support hidden tracks, this will end in a loss of data, not continuing...");
return (int)ErrorNumber.UnsupportedMedia;
/*}
AaruConsole.ErrorWriteLine("Output format does not support hidden tracks, this will end in a loss of data, continuing...");*/
}
if(!outputFormat.Create(outputPath, mediaType, parsedOptions, inputFormat.Info.Sectors,
inputFormat.Info.SectorSize))
{