File tree Expand file tree Collapse file tree
src/SharpCompress/Common/Zip
tests/SharpCompress.Test/Zip Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11using System . IO ;
22using SharpCompress . Common . Zip . Headers ;
3- using SharpCompress . IO ;
43
54namespace SharpCompress . Common . Zip ;
65
76internal class SeekableZipFilePart : ZipFilePart
87{
98 private bool _isLocalHeaderLoaded ;
109 private readonly SeekableZipHeaderFactory _headerFactory ;
11- private readonly DirectoryEntryHeader _directoryEntryHeader ;
1210
1311 internal SeekableZipFilePart (
1412 SeekableZipHeaderFactory headerFactory ,
1513 DirectoryEntryHeader header ,
1614 Stream stream
1715 )
18- : base ( header , stream )
19- {
20- _headerFactory = headerFactory ;
21- _directoryEntryHeader = header ;
22- }
16+ : base ( header , stream ) => _headerFactory = headerFactory ;
2317
2418 internal override Stream GetCompressedStream ( )
2519 {
@@ -44,16 +38,6 @@ protected override Stream CreateBaseStream()
4438 {
4539 BaseStream . Position = Header . DataStartPosition . NotNull ( ) ;
4640
47- if (
48- ( Header . CompressedSize == 0 )
49- && FlagUtility . HasFlag ( Header . Flags , HeaderFlags . UsePostDataDescriptor )
50- && _directoryEntryHeader . HasData
51- && ( _directoryEntryHeader . CompressedSize != 0 )
52- )
53- {
54- return new ReadOnlySubStream ( BaseStream , _directoryEntryHeader . CompressedSize ) ;
55- }
56-
5741 return BaseStream ;
5842 }
5943}
Original file line number Diff line number Diff line change @@ -149,6 +149,12 @@ DirectoryEntryHeader directoryEntryHeader
149149 {
150150 throw new InvalidOperationException ( ) ;
151151 }
152+ if ( FlagUtility . HasFlag ( localEntryHeader . Flags , HeaderFlags . UsePostDataDescriptor ) )
153+ {
154+ localEntryHeader . Crc = directoryEntryHeader . Crc ;
155+ localEntryHeader . CompressedSize = directoryEntryHeader . CompressedSize ;
156+ localEntryHeader . UncompressedSize = directoryEntryHeader . UncompressedSize ;
157+ }
152158 return localEntryHeader ;
153159 }
154160}
Original file line number Diff line number Diff line change @@ -808,4 +808,16 @@ public void Zip_Forced_Ignores_UnicodePathExtra()
808808 Assert . Equal ( "きょきゅんきゃんきゅ_wav.frq" , reader . Entry . Key ) ;
809809 }
810810 }
811+
812+ [ Fact ]
813+ public void TestDataDescriptorRead ( )
814+ {
815+ using var archive = ArchiveFactory . Open (
816+ Path . Combine ( TEST_ARCHIVES_PATH , "Zip.none.datadescriptors.zip" )
817+ ) ;
818+ var firstEntry = archive . Entries . First ( ) ;
819+ Assert . Equal ( 199 , firstEntry . Size ) ;
820+ using var _ = firstEntry . OpenEntryStream ( ) ;
821+ Assert . Equal ( 199 , firstEntry . Size ) ;
822+ }
811823}
You can’t perform that action at this time.
0 commit comments