changeset 12966:cac020298633 jdk8u171-b02

Merge
author coffeys
date Tue, 09 Jan 2018 09:31:00 +0000
parents 707ea8cc6462 d0ebeee68e8e
children e7e27f446209
files
diffstat 7 files changed, 265 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Fri Dec 08 09:37:28 2017 -0500
+++ b/.hgtags	Tue Jan 09 09:31:00 2018 +0000
@@ -856,5 +856,6 @@
 1d2ee5e60df1c3bc889c92154d839bfe73077f66 jdk8u162-b10
 95df717479b19f5ea244afc67434827f2f851287 jdk8u162-b11
 ddae5cb11d6c04130b8002b852bc7f80e0c8bcd2 jdk8u162-b12
+8e40acfcc41a631f5922824712d4336742652eac jdk8u162-b31
 b6195815c4bbbf275f1aefd337d805eb66f2b5b8 jdk8u171-b00
 f1792a59f1fa20e47fe5d4561754012440564bec jdk8u171-b01
--- a/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java	Fri Dec 08 09:37:28 2017 -0500
+++ b/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java	Tue Jan 09 09:31:00 2018 +0000
@@ -212,7 +212,7 @@
             else
                 sb.append(ownerType.toString());
 
-            sb.append(".");
+            sb.append("$");
 
             if (ownerType instanceof ParameterizedTypeImpl) {
                 // Find simple name of nested type by removing the
@@ -220,7 +220,7 @@
                 sb.append(rawType.getName().replace( ((ParameterizedTypeImpl)ownerType).rawType.getName() + "$",
                                          ""));
             } else
-                sb.append(rawType.getName());
+               sb.append(rawType.getSimpleName());
         } else
             sb.append(rawType.getName());
 
--- a/src/share/native/java/util/zip/Deflater.c	Fri Dec 08 09:37:28 2017 -0500
+++ b/src/share/native/java/util/zip/Deflater.c	Tue Jan 09 09:31:00 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -164,17 +164,14 @@
         res = deflateParams(strm, level, strategy);
         (*env)->ReleasePrimitiveArrayCritical(env, b, out_buf, 0);
         (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0);
-
         switch (res) {
         case Z_OK:
             (*env)->SetBooleanField(env, this, setParamsID, JNI_FALSE);
+        case Z_BUF_ERROR:
             this_off += this_len - strm->avail_in;
             (*env)->SetIntField(env, this, offID, this_off);
             (*env)->SetIntField(env, this, lenID, strm->avail_in);
             return (jint) (len - strm->avail_out);
-        case Z_BUF_ERROR:
-            (*env)->SetBooleanField(env, this, setParamsID, JNI_FALSE);
-            return 0;
         default:
             JNU_ThrowInternalError(env, strm->msg);
             return 0;
@@ -203,18 +200,16 @@
         res = deflate(strm, finish ? Z_FINISH : flush);
         (*env)->ReleasePrimitiveArrayCritical(env, b, out_buf, 0);
         (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0);
-
         switch (res) {
         case Z_STREAM_END:
             (*env)->SetBooleanField(env, this, finishedID, JNI_TRUE);
             /* fall through */
         case Z_OK:
+        case Z_BUF_ERROR:
             this_off += this_len - strm->avail_in;
             (*env)->SetIntField(env, this, offID, this_off);
             (*env)->SetIntField(env, this, lenID, strm->avail_in);
             return len - strm->avail_out;
-        case Z_BUF_ERROR:
-            return 0;
             default:
             JNU_ThrowInternalError(env, strm->msg);
             return 0;
--- a/src/share/native/java/util/zip/zlib/deflate.c	Fri Dec 08 09:37:28 2017 -0500
+++ b/src/share/native/java/util/zip/zlib/deflate.c	Tue Jan 09 09:31:00 2018 +0000
@@ -505,8 +505,6 @@
     s->pending = 0;
     s->pending_out = s->pending_buf;
 
-    s->high_water = 0;      /* reset to its inital value 0 */
-
     if (s->wrap < 0) {
         s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
     }
@@ -520,7 +518,7 @@
         s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
 #endif
         adler32(0L, Z_NULL, 0);
-    s->last_flush = Z_NO_FLUSH;
+    s->last_flush = -2;
 
     _tr_init(s);
 
@@ -613,7 +611,7 @@
     func = configuration_table[s->level].func;
 
     if ((strategy != s->strategy || func != configuration_table[level].func) &&
-        s->high_water) {
+        s->last_flush != -2) {
         /* Flush the last buffer: */
         int err = deflate(strm, Z_BLOCK);
         if (err == Z_STREAM_ERROR)
--- a/src/share/native/java/util/zip/zlib/patches/ChangeLog_java	Fri Dec 08 09:37:28 2017 -0500
+++ b/src/share/native/java/util/zip/zlib/patches/ChangeLog_java	Tue Jan 09 09:31:00 2018 +0000
@@ -78,6 +78,8 @@
 
 (6) deflate.c  #8184306
 
+(7) deflate.c undo (6), replaced withe the official zlib repo fix see#305/#f969409
+
 *** 503,512 ****
 --- 503,514 ----
   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/lang/reflect/Generics/TestGenericReturnTypeToString.java	Tue Jan 09 09:31:00 2018 +0000
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8054213
+ * @summary Check that toString method works properly for generic return type
+ * obtained via reflection
+ * @run main TestGenericReturnTypeToString
+ */
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Method;
+import java.util.List;
+
+public class TestGenericReturnTypeToString {
+
+    public static void main(String[] args) {
+        boolean hasFailures = false;
+        for (Method method : TestGenericReturnTypeToString.class.getMethods()) {
+            if (method.isAnnotationPresent(ExpectedGenericString.class)) {
+                ExpectedGenericString es = method.getAnnotation
+                        (ExpectedGenericString.class);
+                String result = method.getGenericReturnType().toString();
+                if (!es.value().equals(result)) {
+                    hasFailures = true;
+                    System.err.println("Unexpected result of " +
+                            "getGenericReturnType().toString() " +
+                            " for " + method.getName()
+                            + " expected: " + es.value() + " actual: " + result);
+                }
+            }
+            if (hasFailures) {
+                throw new RuntimeException("Test failed");
+            }
+        }
+    }
+
+    @ExpectedGenericString("TestGenericReturnTypeToString$" +
+          "FirstInnerClassGeneric<Dummy>$SecondInnerClassGeneric<Dummy>")
+    public FirstInnerClassGeneric<Dummy>.SecondInnerClassGeneric<Dummy> foo1() {
+        return null;
+    }
+
+    @ExpectedGenericString("TestGenericReturnTypeToString$" +
+          "FirstInnerClassGeneric<Dummy>$SecondInnerClass")
+    public FirstInnerClassGeneric<Dummy>.SecondInnerClass foo2() {
+        return null;
+    }
+
+    @ExpectedGenericString("TestGenericReturnTypeToString$" +
+          "FirstInnerClass$SecondInnerClassGeneric<Dummy>")
+    public FirstInnerClass.SecondInnerClassGeneric<Dummy> foo3() {
+        return null;
+    }
+
+    @ExpectedGenericString("class TestGenericReturnTypeToString$" +
+          "FirstInnerClass$SecondInnerClass")
+    public FirstInnerClass.SecondInnerClass foo4() {
+        return null;
+    }
+
+    @ExpectedGenericString(
+          "java.util.List<java.lang.String>")
+    public java.util.List<java.lang.String> foo5() {
+        return null;
+    }
+
+    @ExpectedGenericString("interface TestGenericReturnTypeToString$" +
+          "FirstInnerClass$Interface")
+    public FirstInnerClass.Interface foo6() {
+        return null;
+    }
+
+    @ExpectedGenericString("TestGenericReturnTypeToString$" +
+          "FirstInnerClass$InterfaceGeneric<Dummy>")
+    public FirstInnerClass.InterfaceGeneric<Dummy> foo7() {
+        return null;
+    }
+
+    public static class FirstInnerClass {
+
+        public class SecondInnerClassGeneric<T> {
+        }
+
+        public class SecondInnerClass {
+        }
+
+        interface Interface {
+        }
+
+        interface InterfaceGeneric<T> {
+        }
+    }
+
+    public class FirstInnerClassGeneric<T> {
+
+        public class SecondInnerClassGeneric<T> {
+        }
+
+        public class SecondInnerClass {
+        }
+    }
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface ExpectedGenericString {
+    String value();
+}
+
+class Dummy {
+}
--- a/test/java/util/zip/InflateIn_DeflateOut.java	Fri Dec 08 09:37:28 2017 -0500
+++ b/test/java/util/zip/InflateIn_DeflateOut.java	Tue Jan 09 09:31:00 2018 +0000
@@ -23,7 +23,7 @@
 
 /**
  * @test
- * @bug 4206909 4813885
+ * @bug 4206909 4813885 8189789
  * @summary Test basic functionality of DeflaterOutputStream/InflaterInputStream and GZIPOutputStream/GZIPInputStream, including flush
  */
 
@@ -146,6 +146,47 @@
         check(Arrays.equals(data, buf));
     }
 
+    private static void TestFlushableGZIPOutputStream() throws Throwable {
+        Random random = new Random(new Date().getTime());
+
+        ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
+        OutputStream output = new FlushableGZIPOutputStream(byteOutStream);
+
+        byte[] data = new byte[random.nextInt(1024 * 1024)];
+        byte[] buf = new byte[data.length];
+        random.nextBytes(data);
+
+        output.write(data);
+        for (int i=0; i<data.length; i++) {
+            output.write(data[i]);
+        }
+        output.flush();
+        for (int i=0; i<data.length; i++) {
+            output.write(data[i]);
+        }
+        output.write(data);
+        output.close();
+
+        ByteArrayInputStream byteInStream =
+                new ByteArrayInputStream(byteOutStream.toByteArray());
+
+        GZIPInputStream gzis = new GZIPInputStream(byteInStream);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        int numRead;
+        byte[] b = new byte[4 * 1024];
+        try {
+            while ((numRead = gzis.read(buf)) >= 0) {
+                baos.write(b, 0, numRead);
+            }
+        } finally {
+            baos.close();
+        }
+
+        byte[] decompressedBytes = baos.toByteArray();
+
+        check(decompressedBytes.length == data.length * 4);
+    }
+
     private static void check(InputStream is, OutputStream os)
         throws Throwable
     {
@@ -267,6 +308,7 @@
         LineOrientedProtocol();
         GZWriteFlushRead();
         GZLineOrientedProtocol();
+        TestFlushableGZIPOutputStream();
     }
 
     //--------------------- Infrastructure ---------------------------
@@ -284,3 +326,80 @@
         System.out.println("\nPassed = " + passed + " failed = " + failed);
         if (failed > 0) throw new AssertionError("Some tests failed");}
 }
+
+class FlushableGZIPOutputStream extends GZIPOutputStream {
+    public FlushableGZIPOutputStream(OutputStream os) throws IOException {
+        super(os);
+    }
+
+    private static final byte[] EMPTYBYTEARRAY = new byte[0];
+    private boolean hasData = false;
+
+    /**
+     * Here we make sure we have received data, so that the header has been for
+     * sure written to the output stream already.
+     */
+    @Override
+    public synchronized void write(byte[] bytes, int i, int i1)
+            throws IOException {
+        super.write(bytes, i, i1);
+        hasData = true;
+    }
+
+    @Override
+    public synchronized void write(int i) throws IOException {
+        super.write(i);
+        hasData = true;
+    }
+
+    @Override
+    public synchronized void write(byte[] bytes) throws IOException {
+        super.write(bytes);
+        hasData = true;
+    }
+
+    @Override
+    public synchronized void flush() throws IOException {
+        if (!hasData) {
+            return; // do not allow the gzip header to be flushed on its own
+        }
+
+        // trick the deflater to flush
+        /**
+         * Now this is tricky: We force the Deflater to flush its data by
+         * switching compression level. As yet, a perplexingly simple workaround
+         * for
+         * http://developer.java.sun.com/developer/bugParade/bugs/4255743.html
+         */
+        if (!def.finished()) {
+            def.setInput(EMPTYBYTEARRAY, 0, 0);
+
+            def.setLevel(Deflater.NO_COMPRESSION);
+            deflate();
+
+            def.setLevel(Deflater.DEFAULT_COMPRESSION);
+            deflate();
+
+            out.flush();
+        }
+
+        hasData = false; // no more data to flush
+    }
+
+    /*
+     * Keep on calling deflate until it runs dry. The default implementation
+     * only does it once and can therefore hold onto data when they need to be
+     * flushed out.
+     */
+    @Override
+    protected void deflate() throws IOException {
+        int len;
+        do {
+            len = def.deflate(buf, 0, buf.length);
+            if (len > 0) {
+                out.write(buf, 0, len);
+            }
+        } while (len != 0);
+    }
+
+}