From 601cdf67ba76a5571e5c8e9256563d8e080f1c08 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Thu, 29 Jan 2009 13:22:58 +0000 Subject: [PATCH] Make sure ZIP archive is closed even when a RuntimeExpection occurs. PR 46559 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@738853 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 5 +++++ src/main/org/apache/tools/zip/ZipFile.java | 15 +++++++++------ src/tests/antunit/taskdefs/unzip-test.xml | 14 ++++++++++++++ .../antunit/taskdefs/zip/Bugzilla-42940.zip | Bin 0 -> 10930 bytes .../antunit/taskdefs/zip/Bugzilla-46559.zip | Bin 0 -> 10930 bytes 5 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 src/tests/antunit/taskdefs/zip/Bugzilla-42940.zip create mode 100644 src/tests/antunit/taskdefs/zip/Bugzilla-46559.zip diff --git a/WHATSNEW b/WHATSNEW index 8077debb4..51f4ab55b 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -331,6 +331,11 @@ Fixed bugs: * resource collection kept only one of entries deemed equal by the chosen Comparator. Bugzilla report 46527. + * the ZipFile class used by and others could leave the + archive open (making it undeletable on Windows as long as the java + VM was running) for files with an unexpected internal structure. + Bugzilla Report 46559. + Other changes: -------------- diff --git a/src/main/org/apache/tools/zip/ZipFile.java b/src/main/org/apache/tools/zip/ZipFile.java index feed30d01..6a85f770a 100644 --- a/src/main/org/apache/tools/zip/ZipFile.java +++ b/src/main/org/apache/tools/zip/ZipFile.java @@ -150,16 +150,19 @@ public class ZipFile { public ZipFile(File f, String encoding) throws IOException { this.encoding = encoding; archive = new RandomAccessFile(f, "r"); + boolean success = false; try { populateFromCentralDirectory(); resolveLocalFileHeaderData(); - } catch (IOException e) { - try { - archive.close(); - } catch (IOException e2) { - // swallow, throw the original exception instead + success = true; + } finally { + if (!success) { + try { + archive.close(); + } catch (IOException e2) { + // swallow, throw the original exception instead + } } - throw e; } } diff --git a/src/tests/antunit/taskdefs/unzip-test.xml b/src/tests/antunit/taskdefs/unzip-test.xml index cb4af6be5..ed75de469 100644 --- a/src/tests/antunit/taskdefs/unzip-test.xml +++ b/src/tests/antunit/taskdefs/unzip-test.xml @@ -43,4 +43,18 @@ dest="${output}"/> + + + + + + + + + + + + diff --git a/src/tests/antunit/taskdefs/zip/Bugzilla-42940.zip b/src/tests/antunit/taskdefs/zip/Bugzilla-42940.zip new file mode 100644 index 0000000000000000000000000000000000000000..2f7566082c17042d11f03aa509b6de2402731e0c GIT binary patch literal 10930 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 vl5