diff --git a/src/etc/testcases/taskdefs/zip.xml b/src/etc/testcases/taskdefs/zip.xml index 1c8c63e2d..e1ed9a5b5 100644 --- a/src/etc/testcases/taskdefs/zip.xml +++ b/src/etc/testcases/taskdefs/zip.xml @@ -25,9 +25,37 @@ basedir="."/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/org/apache/tools/ant/taskdefs/Zip.java b/src/main/org/apache/tools/ant/taskdefs/Zip.java index fc005050f..4a7e605b3 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Zip.java +++ b/src/main/org/apache/tools/ant/taskdefs/Zip.java @@ -270,15 +270,23 @@ public class Zip extends MatchingTask { File zipSrc = fs.getSrc(); ZipEntry entry; - ZipInputStream in = new ZipInputStream(new FileInputStream(zipSrc)); - while ((entry = in.getNextEntry()) != null) { - String vPath = entry.getName(); - if (zipScanner.match(vPath)) { - addParentDirs(null, vPath, zOut, prefix); - if (! entry.isDirectory()) { - zipFile(in, zOut, prefix+vPath, entry.getTime()); + ZipInputStream in = null; + try { + in = new ZipInputStream(new FileInputStream(zipSrc)); + + while ((entry = in.getNextEntry()) != null) { + String vPath = entry.getName(); + if (zipScanner.match(vPath)) { + addParentDirs(null, vPath, zOut, prefix); + if (! entry.isDirectory()) { + zipFile(in, zOut, prefix+vPath, entry.getTime()); + } } } + } finally { + if (in != null) { + in.close(); + } } } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java index 5d82d62be..ada7d1a15 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java @@ -87,4 +87,17 @@ public class ZipTest extends TaskdefsTest { executeTarget("cleanup"); } + public void test5() { + executeTarget("test5"); + } + + + public void test6() { + executeTarget("test6"); + } + + + public void test7() { + executeTarget("test7"); + } }