Skip to content

Commit 0269465

Browse files
benleedompiksel
authored andcommitted
Merge PR #295: Fix ZipEntry name mismatch when attempting to delete a directory entry
1 parent 45347c3 commit 0269465

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2461,7 +2461,9 @@ private void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc
24612461
private int FindExistingUpdate(ZipEntry entry)
24622462
{
24632463
int result = -1;
2464-
string convertedName = GetTransformedFileName(entry.Name);
2464+
string convertedName = entry.IsDirectory
2465+
? GetTransformedDirectoryName(entry.Name)
2466+
: GetTransformedFileName(entry.Name);
24652467

24662468
if (updateIndex_.ContainsKey(convertedName))
24672469
{

test/ICSharpCode.SharpZipLib.Tests/Zip/ZipFileHandling.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,24 +403,36 @@ public void AddAndDeleteEntries()
403403
string addFile2 = Path.Combine(tempFile, "b.dat");
404404
MakeTempFile(addFile2, 259);
405405

406+
string addDirectory = Path.Combine(tempFile, "dir");
407+
406408
tempFile = Path.Combine(tempFile, "SharpZipTest.Zip");
407409

408410
using (ZipFile f = ZipFile.Create(tempFile))
409411
{
410412
f.BeginUpdate();
411413
f.Add(addFile);
412414
f.Add(addFile2);
415+
f.AddDirectory(addDirectory);
413416
f.CommitUpdate();
414417
Assert.IsTrue(f.TestArchive(true));
415418
}
416419

417420
using (ZipFile f = new ZipFile(tempFile))
418421
{
419-
Assert.AreEqual(2, f.Count);
422+
Assert.AreEqual(3, f.Count);
420423
Assert.IsTrue(f.TestArchive(true));
424+
425+
// Delete file
421426
f.BeginUpdate();
422427
f.Delete(f[0]);
423428
f.CommitUpdate();
429+
Assert.AreEqual(2, f.Count);
430+
Assert.IsTrue(f.TestArchive(true));
431+
432+
// Delete directory
433+
f.BeginUpdate();
434+
f.Delete(f[1]);
435+
f.CommitUpdate();
424436
Assert.AreEqual(1, f.Count);
425437
Assert.IsTrue(f.TestArchive(true));
426438
}

0 commit comments

Comments
 (0)