From 98b0785bde337bf914f5d40cdf2ddc5a62906f31 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 30 Jun 2021 20:27:51 +0100 Subject: [PATCH] Return empty data in BlindWrite 5 images where only some tracks has subchannel. Fixes #485 --- Aaru.Images/BlindWrite5/Read.cs | 76 ++++++++++++++++++++++++--- Aaru.Tests/Images/BlindWrite5.cs | 88 +++++++++++++++++--------------- Aaru.Tests/Images/BlindWrite6.cs | 44 ++++++++-------- 3 files changed, 141 insertions(+), 67 deletions(-) diff --git a/Aaru.Images/BlindWrite5/Read.cs b/Aaru.Images/BlindWrite5/Read.cs index 6a436692c..65615da10 100644 --- a/Aaru.Images/BlindWrite5/Read.cs +++ b/Aaru.Images/BlindWrite5/Read.cs @@ -996,9 +996,8 @@ namespace Aaru.DiscImages track.TrackSubchannelType = splitStartChars.Subchannel; track.TrackSubchannelOffset = track.TrackFileOffset; - if(splitStartChars.Subchannel == TrackSubchannelType.PackedInterleaved) - if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) - _imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); + if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + _imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); } splitStartChars.FileFilter = splitStream.Filter; @@ -1028,9 +1027,8 @@ namespace Aaru.DiscImages track.TrackSubchannelType = chars.Subchannel; track.TrackSubchannelOffset = track.TrackFileOffset; - if(chars.Subchannel == TrackSubchannelType.PackedInterleaved) - if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) - _imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); + if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + _imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); } break; @@ -1745,7 +1743,40 @@ namespace Aaru.DiscImages break; } case SectorTagType.CdSectorSubchannel: - throw new NotImplementedException("Packed subchannel not yet supported"); + { + switch(chars.Subchannel) + { + case TrackSubchannelType.PackedInterleaved: + { + sectorOffset = 2352; + sectorSize = 96; + sectorSkip = 0; + + break; + } + + case TrackSubchannelType.Q16Interleaved: + { + sectorOffset = 2352; + sectorSize = 16; + sectorSkip = 0; + + break; + } + case TrackSubchannelType.None: + { + if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + throw new + FeatureSupportedButNotImplementedImageException("Unsupported track type"); + + return new byte[length * 96]; + } + + default: throw new ArgumentOutOfRangeException(); + } + + break; + } default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } @@ -1797,6 +1828,14 @@ namespace Aaru.DiscImages break; } + case TrackSubchannelType.None: + { + if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + throw new + FeatureSupportedButNotImplementedImageException("Unsupported track type"); + + return new byte[length * 96]; + } default: throw new ArgumentOutOfRangeException(); } @@ -1888,6 +1927,14 @@ namespace Aaru.DiscImages break; } + case TrackSubchannelType.None: + { + if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + throw new + FeatureSupportedButNotImplementedImageException("Unsupported track type"); + + return new byte[length * 96]; + } default: throw new ArgumentOutOfRangeException(); } @@ -1954,6 +2001,14 @@ namespace Aaru.DiscImages break; } + case TrackSubchannelType.None: + { + if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + throw new + FeatureSupportedButNotImplementedImageException("Unsupported track type"); + + return new byte[length * 96]; + } default: throw new ArgumentOutOfRangeException(); } @@ -1989,7 +2044,14 @@ namespace Aaru.DiscImages break; } + case TrackSubchannelType.None: + { + if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) + throw new + FeatureSupportedButNotImplementedImageException("Unsupported track type"); + return new byte[length * 96]; + } default: throw new ArgumentOutOfRangeException(); } diff --git a/Aaru.Tests/Images/BlindWrite5.cs b/Aaru.Tests/Images/BlindWrite5.cs index 7da557bb9..fa19640fa 100644 --- a/Aaru.Tests/Images/BlindWrite5.cs +++ b/Aaru.Tests/Images/BlindWrite5.cs @@ -62,11 +62,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "gigarec.B5T", - MediaType = MediaType.CDR, - Sectors = 469652, - MD5 = "e2e967adc0e5c530964ac4eebe8cac47", - LongMD5 = "1dc7801008110af6b8015aad64d91739", + TestFile = "gigarec.B5T", + MediaType = MediaType.CDR, + Sectors = 469652, + MD5 = "e2e967adc0e5c530964ac4eebe8cac47", + LongMD5 = "1dc7801008110af6b8015aad64d91739", + SubchannelMD5 = "26c27541d0d55fe9a87f3f7de622466d", Tracks = new[] { new TrackInfoTestExpected @@ -517,11 +518,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "report_cdr.B5T", - MediaType = MediaType.CDR, - Sectors = 254265, - MD5 = "65e79ef740833188a0f5be19da14c09d", - LongMD5 = "47b32c32a6427ad1e6b4b1bd047df716", + TestFile = "report_cdr.B5T", + MediaType = MediaType.CDR, + Sectors = 254265, + MD5 = "65e79ef740833188a0f5be19da14c09d", + LongMD5 = "47b32c32a6427ad1e6b4b1bd047df716", + SubchannelMD5 = "f2246afbf3dfbcad5acd2c85134b568e", Tracks = new[] { new TrackInfoTestExpected @@ -536,11 +538,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "report_cdrom.B5T", - MediaType = MediaType.CDROM, - Sectors = 254265, - MD5 = "bf4bbec517101d0d6f45d2e4d50cb875", - LongMD5 = "3d3f9cf7d1ba2249b1e7960071e5af46", + TestFile = "report_cdrom.B5T", + MediaType = MediaType.CDROM, + Sectors = 254265, + MD5 = "bf4bbec517101d0d6f45d2e4d50cb875", + LongMD5 = "3d3f9cf7d1ba2249b1e7960071e5af46", + SubchannelMD5 = "7a01c3f2fe95664ef5726b3ad9597282", Tracks = new[] { new TrackInfoTestExpected @@ -555,11 +558,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "report_cdrw_2x.B5T", - MediaType = MediaType.CDRW, - Sectors = 308224, - MD5 = "1e55aa420ca8f8ea77d5b597c9cfc19b", - LongMD5 = "3af5f943ddb9427d9c63a4ce3b704db9", + TestFile = "report_cdrw_2x.B5T", + MediaType = MediaType.CDRW, + Sectors = 308224, + MD5 = "1e55aa420ca8f8ea77d5b597c9cfc19b", + LongMD5 = "3af5f943ddb9427d9c63a4ce3b704db9", + SubchannelMD5 = "6da685990c9b366bf49d556dc3e1db08", Tracks = new[] { new TrackInfoTestExpected @@ -673,11 +677,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "test_enhancedcd.B5T", - MediaType = MediaType.CDR, - Sectors = 59206, - MD5 = "3736dbfcb7bf5648e3ac067379087001", - LongMD5 = "c2dfd5a32678c3ff049c143c98ad36a5", + TestFile = "test_enhancedcd.B5T", + MediaType = MediaType.CDR, + Sectors = 59206, + MD5 = "3736dbfcb7bf5648e3ac067379087001", + LongMD5 = "c2dfd5a32678c3ff049c143c98ad36a5", + SubchannelMD5 = "f486c17d8b43d802e8f00637d4b27de1", Tracks = new[] { new TrackInfoTestExpected @@ -708,11 +713,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "test_incd_udf200_finalized.B5T", - MediaType = MediaType.CDR, - Sectors = 350134, - MD5 = "901e4fe17ea6591b1fd53ba822428ef4", - LongMD5 = "7b489457540c40037aabcf3f21e0201e", + TestFile = "test_incd_udf200_finalized.B5T", + MediaType = MediaType.CDR, + Sectors = 350134, + MD5 = "901e4fe17ea6591b1fd53ba822428ef4", + LongMD5 = "7b489457540c40037aabcf3f21e0201e", + SubchannelMD5 = "51f7e060a5d85539bfea0fd7aa3ee107", Tracks = new[] { new TrackInfoTestExpected @@ -778,11 +784,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "test_multisession.B5T", - MediaType = MediaType.CDR, - Sectors = 51168, - MD5 = "e2e19cf38891e67a0829d01842b4052e", - LongMD5 = "3e646a04eb29a8e0ad892b6ac00ba962", + TestFile = "test_multisession.B5T", + MediaType = MediaType.CDR, + Sectors = 51168, + MD5 = "e2e19cf38891e67a0829d01842b4052e", + LongMD5 = "3e646a04eb29a8e0ad892b6ac00ba962", + SubchannelMD5 = "94c9b99c0ca454bbbb399da2b7e4c86d", Tracks = new[] { new TrackInfoTestExpected @@ -821,11 +828,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "test_videocd.B5T", - MediaType = MediaType.CDR, - Sectors = 48794, - MD5 = "203a40d27b9bee018705c2df8d15e96d", - LongMD5 = "a686cade367db0a12fef1d9862f39e1d", + TestFile = "test_videocd.B5T", + MediaType = MediaType.CDR, + Sectors = 48794, + MD5 = "203a40d27b9bee018705c2df8d15e96d", + LongMD5 = "a686cade367db0a12fef1d9862f39e1d", + SubchannelMD5 = "177b666c1fb45c85f5a2bfe690046802", Tracks = new[] { new TrackInfoTestExpected diff --git a/Aaru.Tests/Images/BlindWrite6.cs b/Aaru.Tests/Images/BlindWrite6.cs index 7a67f74fe..b0bc30d3b 100644 --- a/Aaru.Tests/Images/BlindWrite6.cs +++ b/Aaru.Tests/Images/BlindWrite6.cs @@ -375,11 +375,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "report_cdr.B6T", - MediaType = MediaType.CDR, - Sectors = 254265, - MD5 = "63c99a087570b8936bb55156f5502f38", - LongMD5 = "368c06d4b42ed581f3ad7f6ad57f70f6", + TestFile = "report_cdr.B6T", + MediaType = MediaType.CDR, + Sectors = 254265, + MD5 = "63c99a087570b8936bb55156f5502f38", + LongMD5 = "368c06d4b42ed581f3ad7f6ad57f70f6", + SubchannelMD5 = "9c231e680e601cd10bb61fb519f00c84", Tracks = new[] { new TrackInfoTestExpected @@ -394,11 +395,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "report_cdrom.B6T", - MediaType = MediaType.CDROM, - Sectors = 254265, - MD5 = "bf4bbec517101d0d6f45d2e4d50cb875", - LongMD5 = "3d3f9cf7d1ba2249b1e7960071e5af46", + TestFile = "report_cdrom.B6T", + MediaType = MediaType.CDROM, + Sectors = 254265, + MD5 = "bf4bbec517101d0d6f45d2e4d50cb875", + LongMD5 = "3d3f9cf7d1ba2249b1e7960071e5af46", + SubchannelMD5 = "46b6244ed63434cb0f91e0610c63fec8", Tracks = new[] { new TrackInfoTestExpected @@ -413,11 +415,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "report_cdrw_2x.B6T", - MediaType = MediaType.CDRW, - Sectors = 308224, - MD5 = "1e55aa420ca8f8ea77d5b597c9cfc19b", - LongMD5 = "3af5f943ddb9427d9c63a4ce3b704db9", + TestFile = "report_cdrw_2x.B6T", + MediaType = MediaType.CDRW, + Sectors = 308224, + MD5 = "1e55aa420ca8f8ea77d5b597c9cfc19b", + LongMD5 = "3af5f943ddb9427d9c63a4ce3b704db9", + SubchannelMD5 = "19f74cd5f05894203465374111be2aa7", Tracks = new[] { new TrackInfoTestExpected @@ -432,11 +435,12 @@ namespace Aaru.Tests.Images }, new OpticalImageTestExpected { - TestFile = "test_karaoke_multi_sampler.B6T", - MediaType = MediaType.CDROMXA, - Sectors = 329158, - MD5 = "a34e29e42b60023a6ae59f37d2bd4bea", - LongMD5 = "e981f7dfdb522ba937fe75474e23a446", + TestFile = "test_karaoke_multi_sampler.B6T", + MediaType = MediaType.CDROMXA, + Sectors = 329158, + MD5 = "a34e29e42b60023a6ae59f37d2bd4bea", + LongMD5 = "e981f7dfdb522ba937fe75474e23a446", + SubchannelMD5 = "485a233924c003a1ab2ea9228f582344", Tracks = new[] { new TrackInfoTestExpected