diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 9a4615d4b..1f4e7a3dc 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -172,6 +172,7 @@ Nico Seessle
Nigel Magnay
Oliver Merkel
Oliver Rossmueller
+Oystein Gisnas
Patrick C. Beard
Patrick Chanezon
Patrick G. Heck (Gus Heck)
diff --git a/contributors.xml b/contributors.xml
index 75664265a..1137e0b4c 100644
--- a/contributors.xml
+++ b/contributors.xml
@@ -698,6 +698,9 @@
Oliver
Rossmueller
+
+ Øystein
+ Gisnås
Patrick
C.
diff --git a/src/main/org/apache/tools/tar/TarOutputStream.java b/src/main/org/apache/tools/tar/TarOutputStream.java
index e340092a2..a7d99e320 100644
--- a/src/main/org/apache/tools/tar/TarOutputStream.java
+++ b/src/main/org/apache/tools/tar/TarOutputStream.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2002,2004-2005 The Apache Software Foundation
+ * Copyright 2000-2002,2004-2006 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -52,6 +52,8 @@ public class TarOutputStream extends FilterOutputStream {
protected byte[] assemBuf;
protected TarBuffer buffer;
protected int longFileMode = LONGFILE_ERROR;
+
+ private boolean closed = false;
/**
* Constructor for TarInputStream.
@@ -136,8 +138,12 @@ public class TarOutputStream extends FilterOutputStream {
* @throws IOException on error
*/
public void close() throws IOException {
- this.finish();
- this.buffer.close();
+ if (!closed) {
+ this.finish();
+ this.buffer.close();
+ out.close();
+ closed = true;
+ }
}
/**
diff --git a/src/testcases/org/apache/tools/tar/TarOutputStreamTest.java b/src/testcases/org/apache/tools/tar/TarOutputStreamTest.java
new file mode 100644
index 000000000..863bcfb12
--- /dev/null
+++ b/src/testcases/org/apache/tools/tar/TarOutputStreamTest.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.tools.tar;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+public class TarOutputStreamTest extends TestCase {
+
+ public void testClose() throws IOException {
+ ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+ TarOutputStream stream = new TarOutputStream(byteStream);
+ stream.close();
+ stream.close();
+ }
+}