Skip to content

Commit bd7c580

Browse files
authored
Ensure we rewrite all entries, even if not signed - second attempt (#15288)
1 parent d0f89c6 commit bd7c580

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

src/Microsoft.DotNet.SignTool/src/ZipData.cs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ private void RepackWixPack(TaskLoggingHelper log, string tempDir, string wixTool
245245
}
246246
}
247247

248-
#if NET472
248+
#if NETFRAMEWORK
249249
private static bool RunTarProcess(string srcPath, string dstPath, string tarToolPath)
250250
{
251251
var process = Process.Start(new ProcessStartInfo()
@@ -326,34 +326,41 @@ private void RepackTarGZip(TaskLoggingHelper log, string tempDir, string tarTool
326326
#else
327327
private void RepackTarGZip(TaskLoggingHelper log, string tempDir, string tarToolPath)
328328
{
329-
using var outputStream = new MemoryStream();
329+
using MemoryStream outputStream = new();
330330

331+
using (GZipStream gzipStream = new(outputStream, CompressionMode.Compress, leaveOpen: true))
332+
using (TarWriter writer = new(gzipStream))
331333
{
332-
using var gzipStream = new GZipStream(outputStream, CompressionMode.Compress, leaveOpen: true);
333-
using var writer = new TarWriter(gzipStream);
334-
335-
foreach (var entry in ReadTarGZipEntries(FileSignInfo.FullPath))
334+
foreach (TarEntry entry in ReadTarGZipEntries(FileSignInfo.FullPath))
336335
{
337336
if (entry.DataStream != null)
338337
{
339-
var relativeName = entry.Name;
340-
var signedPart = FindNestedPart(relativeName);
338+
Stream dataStream;
339+
340+
string relativeName = entry.Name;
341+
ZipPart? signedPart = FindNestedPart(relativeName);
341342

342343
if (signedPart.HasValue)
343344
{
344-
using var signedStream = File.OpenRead(signedPart.Value.FileSignInfo.FullPath);
345+
dataStream = File.OpenRead(signedPart.Value.FileSignInfo.FullPath);
345346
log.LogMessage(MessageImportance.Low, $"Copying signed stream from {signedPart.Value.FileSignInfo.FullPath} to {FileSignInfo.FullPath} -> {relativeName}.");
346-
entry.DataStream = signedStream;
347-
writer.WriteEntry(entry);
348-
continue;
349347
}
350348
else
351349
{
350+
dataStream = new MemoryStream();
351+
entry.DataStream.CopyTo(dataStream);
352+
dataStream.Position = 0;
352353
log.LogMessage(MessageImportance.Low, $"Didn't find signed part for nested file: {FileSignInfo.FullPath} -> {relativeName}");
353354
}
354-
}
355355

356-
writer.WriteEntry(entry);
356+
entry.DataStream = dataStream;
357+
writer.WriteEntry(entry);
358+
dataStream.Dispose();
359+
}
360+
else
361+
{
362+
writer.WriteEntry(entry);
363+
}
357364
}
358365
}
359366

@@ -363,20 +370,14 @@ private void RepackTarGZip(TaskLoggingHelper log, string tempDir, string tarTool
363370
outputStream.CopyTo(outputFile);
364371
}
365372

366-
internal static IEnumerable<TarEntry> ReadTarGZipEntries(string path)
373+
private static IEnumerable<TarEntry> ReadTarGZipEntries(string path)
367374
{
368375
using var gzipStream = File.Open(path, FileMode.Open);
369376
using var tar = new GZipStream(gzipStream, CompressionMode.Decompress);
370377
using var reader = new TarReader(tar);
371378

372-
while (true)
379+
while (reader.GetNextEntry() is TarEntry entry)
373380
{
374-
var entry = reader.GetNextEntry();
375-
if (entry == null)
376-
{
377-
break;
378-
}
379-
380381
yield return entry;
381382
}
382383
}

0 commit comments

Comments
 (0)