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