--- a/jdk/test/java/util/zip/GZIP/GZIPInZip.java Fri Oct 18 13:45:54 2013 +0100
+++ b/jdk/test/java/util/zip/GZIP/GZIPInZip.java Fri Oct 18 16:06:20 2013 +0400
@@ -22,15 +22,14 @@
*/
/* @test
- * @bug 7021870 8023431
+ * @bug 7021870 8023431 8026756
* @summary Reading last gzip chain member must not close the input stream.
* Garbage following gzip entry must be ignored.
*/
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
@@ -40,9 +39,9 @@
public class GZIPInZip {
- private static volatile Throwable trouble;
+ public static void main(String[] args)
+ throws Throwable {
- public static void main(String[] args) throws Throwable {
doTest(false, false);
doTest(false, true);
doTest(true, false);
@@ -53,63 +52,46 @@
final boolean limitGISBuff)
throws Throwable {
- final PipedOutputStream pos = new PipedOutputStream();
- final PipedInputStream pis = new PipedInputStream(pos);
+ byte[] buf;
+
+ try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ZipOutputStream zos = new ZipOutputStream(baos)) {
+
+ final byte[] xbuf = { 'x' };
- Thread compressor = new Thread() {
- public void run() {
- final byte[] xbuf = { 'x' };
- try (ZipOutputStream zos = new ZipOutputStream(pos)) {
+ zos.putNextEntry(new ZipEntry("a.gz"));
+ GZIPOutputStream gos1 = new GZIPOutputStream(zos);
+ gos1.write(xbuf);
+ gos1.finish();
+ if (appendGarbage)
+ zos.write(xbuf);
+ zos.closeEntry();
- zos.putNextEntry(new ZipEntry("a.gz"));
- try (GZIPOutputStream gos1 = new GZIPOutputStream(zos)) {
- gos1.write(xbuf);
- gos1.finish();
- }
- if (appendGarbage)
- zos.write(xbuf);
+ zos.putNextEntry(new ZipEntry("b.gz"));
+ GZIPOutputStream gos2 = new GZIPOutputStream(zos);
+ gos2.write(xbuf);
+ gos2.finish();
+ zos.closeEntry();
- zos.closeEntry();
+ zos.flush();
+ buf = baos.toByteArray();
+ }
- zos.putNextEntry(new ZipEntry("b.gz"));
- try (GZIPOutputStream gos2 = new GZIPOutputStream(zos)) {
- gos2.write(xbuf);
- gos2.finish();
- }
- zos.closeEntry();
+ try (ByteArrayInputStream bais = new ByteArrayInputStream(buf);
+ ZipInputStream zis = new ZipInputStream(bais)) {
- } catch (Throwable t) {
- trouble = t;
- }
+ zis.getNextEntry();
+ GZIPInputStream gis1 = limitGISBuff ?
+ new GZIPInputStream(zis, 4) :
+ new GZIPInputStream(zis);
+ // try to read more than the entry has
+ gis1.skip(2);
+
+ try {
+ zis.getNextEntry();
+ } catch (IOException e) {
+ throw new RuntimeException("ZIP stream was prematurely closed", e);
}
- };
-
- Thread uncompressor = new Thread() {
- public void run() {
- try (ZipInputStream zis = new ZipInputStream(pis)) {
- zis.getNextEntry();
- try (InputStream gis = limitGISBuff ?
- new GZIPInputStream(zis, 4) :
- new GZIPInputStream(zis)) {
- // try to read more than the entry has
- gis.skip(2);
- }
-
- try {
- zis.getNextEntry();
- } catch (IOException e) {
- throw new AssertionError("ZIP stream was prematurely closed");
- }
- } catch (Throwable t) {
- trouble = t;
- }
- }
- };
-
- compressor.start(); uncompressor.start();
- compressor.join(); uncompressor.join();
-
- if (trouble != null)
- throw trouble;
+ }
}
}