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");
+ }
}