From 612d5c9cdd2735f72704ce64ad1361f9e217a737 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 6 Dec 2022 12:27:35 +0000 Subject: [PATCH] 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. --- Aaru.CommonTypes | 2 +- Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs | 14 ++++++++++++-- Aaru.Images/AaruFormat/Properties.cs | 3 ++- Aaru.Localization/Core.Designer.cs | 6 ++++++ Aaru.Localization/Core.resx | 3 +++ Aaru/Commands/Image/Convert.cs | 15 +++++++++++++++ 6 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Aaru.CommonTypes b/Aaru.CommonTypes index 1cd4ae292..de20a7198 160000 --- a/Aaru.CommonTypes +++ b/Aaru.CommonTypes @@ -1 +1 @@ -Subproject commit 1cd4ae2924e892f5a08a8d0d1cea56d28be9c89b +Subproject commit de20a7198298aaecbe3835c7a6956c3e078a2405 diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs index 20dd3374c..8ff522c88 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -548,6 +548,14 @@ sealed partial class Dump _dumpLog.WriteLine(Localization.Core.Disc_contains_a_hidden_track); UpdateStatus?.Invoke(Localization.Core.Disc_contains_a_hidden_track); + if(!outputOptical.OpticalCapabilities.HasFlag(OpticalImageCapabilities.CanStoreHiddenTracks)) + { + StoppingErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_hidden_tracks); + _dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_hidden_tracks); + + return; + } + List trkList = new() { new Track @@ -1112,8 +1120,10 @@ sealed partial class Dump sectorsForOffset = 0; } - mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private, _dimensions); - ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0008); + mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private, + _dimensions); + + ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0008); if(_createGraph) { diff --git a/Aaru.Images/AaruFormat/Properties.cs b/Aaru.Images/AaruFormat/Properties.cs index 60b7a6595..8b3b44f14 100644 --- a/Aaru.Images/AaruFormat/Properties.cs +++ b/Aaru.Images/AaruFormat/Properties.cs @@ -56,7 +56,8 @@ public sealed partial class AaruFormat OpticalImageCapabilities.CanStoreMultipleTracks | OpticalImageCapabilities.CanStoreNotCdSessions | OpticalImageCapabilities.CanStoreNotCdTracks | - OpticalImageCapabilities.CanStoreIndexes; + OpticalImageCapabilities.CanStoreIndexes | + OpticalImageCapabilities.CanStoreHiddenTracks; /// public ImageInfo Info => _imageInfo; /// diff --git a/Aaru.Localization/Core.Designer.cs b/Aaru.Localization/Core.Designer.cs index 901dbbc5d..5b7b28d8f 100644 --- a/Aaru.Localization/Core.Designer.cs +++ b/Aaru.Localization/Core.Designer.cs @@ -6875,5 +6875,11 @@ namespace Aaru.Localization { return ResourceManager.GetString("CompactDisc_Power_Management_Area_contained_in_image_WithMarkup", resourceCulture); } } + + public static string Output_format_does_not_support_hidden_tracks { + get { + return ResourceManager.GetString("Output_format_does_not_support_hidden_tracks", resourceCulture); + } + } } } diff --git a/Aaru.Localization/Core.resx b/Aaru.Localization/Core.resx index c2cd1db70..689997f7f 100644 --- a/Aaru.Localization/Core.resx +++ b/Aaru.Localization/Core.resx @@ -3499,4 +3499,7 @@ It has no sense to do it, and it will put too much strain on the tape. [bold]CompactDisc Power Management Area contained in image:[/] + + Output format does not properly support storing hidden tracks, this will end in a loss of data, not continuing... + \ No newline at end of file diff --git a/Aaru/Commands/Image/Convert.cs b/Aaru/Commands/Image/Convert.cs index 50c856dd5..64723f8e9 100644 --- a/Aaru/Commands/Image/Convert.cs +++ b/Aaru/Commands/Image/Convert.cs @@ -564,6 +564,21 @@ sealed class ConvertImageCommand : Command 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.Sequence == 0) == true) + { + // TODO: Disabled until 6.0 + /*if(!_force) + {*/ + AaruConsole.ErrorWriteLine(Localization.Core.Output_format_does_not_support_hidden_tracks); + + return (int)ErrorNumber.UnsupportedMedia; + /*} + + AaruConsole.ErrorWriteLine("Output format does not support sessions, this will end in a loss of data, continuing...");*/ + } + bool created = false; Core.Spectre.ProgressSingleSpinner(ctx =>