fix zipentry comment being lost after reading local entry header

This commit is contained in:
Morilli
2025-07-19 19:36:33 +02:00
parent d78a682dd8
commit 4e7baeb2c9
6 changed files with 11 additions and 12 deletions

View File

@@ -18,6 +18,4 @@ public class ZipArchiveEntry : ZipEntry, IArchiveEntry
public bool IsComplete => true;
#endregion
public string? Comment => ((SeekableZipFilePart)Parts.Single()).Comment;
}

View File

@@ -128,6 +128,4 @@ internal class DirectoryEntryHeader : ZipFileEntry
public ushort InternalFileAttributes { get; set; }
public ushort DiskNumberStart { get; set; }
public string? Comment { get; private set; }
}

View File

@@ -120,4 +120,6 @@ internal abstract class ZipFileEntry : ZipHeader
internal ZipFilePart? Part { get; set; }
internal bool IsZip64 => CompressedSize >= uint.MaxValue;
internal string? Comment { get; set; }
}

View File

@@ -25,14 +25,8 @@ internal class SeekableZipFilePart : ZipFilePart
return base.GetCompressedStream();
}
internal string? Comment => ((DirectoryEntryHeader)Header).Comment;
private void LoadLocalHeader()
{
var hasData = Header.HasData;
Header = _headerFactory.GetLocalHeader(BaseStream, ((DirectoryEntryHeader)Header));
Header.HasData = hasData;
}
private void LoadLocalHeader() =>
Header = _headerFactory.GetLocalHeader(BaseStream, (DirectoryEntryHeader)Header);
protected override Stream CreateBaseStream()
{

View File

@@ -149,6 +149,11 @@ internal sealed class SeekableZipHeaderFactory : ZipHeaderFactory
{
throw new InvalidOperationException();
}
// populate fields only known from the DirectoryEntryHeader
localEntryHeader.HasData = directoryEntryHeader.HasData;
localEntryHeader.Comment = directoryEntryHeader.Comment;
if (FlagUtility.HasFlag(localEntryHeader.Flags, HeaderFlags.UsePostDataDescriptor))
{
localEntryHeader.Crc = directoryEntryHeader.Crc;

View File

@@ -83,4 +83,6 @@ public class ZipEntry : Entry
public override bool IsSplitAfter => false;
internal override IEnumerable<FilePart> Parts => _filePart.Empty();
public string? Comment => _filePart?.Header.Comment;
}