From 97bd6e2bf5c0676eb75f78d54f8a7240191943f7 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Thu, 6 Apr 2006 19:25:26 +0000 Subject: [PATCH] allow TarOutputStream to be closed more than once, PR 38027 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@392045 13f79535-47bb-0310-9956-ffa450edef68 --- CONTRIBUTORS | 1 + contributors.xml | 3 ++ .../org/apache/tools/tar/TarOutputStream.java | 12 +++++-- .../apache/tools/tar/TarOutputStreamTest.java | 33 +++++++++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 src/testcases/org/apache/tools/tar/TarOutputStreamTest.java 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(); + } +}