提交 11719aa5 编写于 作者: R robm

Merge

...@@ -183,6 +183,7 @@ public class LWWindowPeer ...@@ -183,6 +183,7 @@ public class LWWindowPeer
updateAlwaysOnTopState(); updateAlwaysOnTopState();
updateMinimumSize(); updateMinimumSize();
updateFocusableWindowState();
final Shape shape = getTarget().getShape(); final Shape shape = getTarget().getShape();
if (shape != null) { if (shape != null) {
......
...@@ -821,9 +821,12 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -821,9 +821,12 @@ AWT_ASSERT_APPKIT_THREAD;
if (p.y >= (frame.origin.y + contentRect.size.height)) { if (p.y >= (frame.origin.y + contentRect.size.height)) {
JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env]; jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
// Currently, no need to deliver the whole NSEvent. if (platformWindow != NULL) {
static JNF_MEMBER_CACHE(jm_deliverNCMouseDown, jc_CPlatformWindow, "deliverNCMouseDown", "()V"); // Currently, no need to deliver the whole NSEvent.
JNFCallVoidMethod(env, platformWindow, jm_deliverNCMouseDown); static JNF_MEMBER_CACHE(jm_deliverNCMouseDown, jc_CPlatformWindow, "deliverNCMouseDown", "()V");
JNFCallVoidMethod(env, platformWindow, jm_deliverNCMouseDown);
(*env)->DeleteLocalRef(env, platformWindow);
}
} }
} }
} }
......
...@@ -146,6 +146,7 @@ static void displaycb_handle ...@@ -146,6 +146,7 @@ static void displaycb_handle
jc_CGraphicsEnvironment, "_displayReconfiguration","(IZ)V"); jc_CGraphicsEnvironment, "_displayReconfiguration","(IZ)V");
JNFCallVoidMethod(env, graphicsEnv, jm_displayReconfiguration, JNFCallVoidMethod(env, graphicsEnv, jm_displayReconfiguration,
(jint) display, (jboolean) flags & kCGDisplayRemoveFlag); (jint) display, (jboolean) flags & kCGDisplayRemoveFlag);
(*env)->DeleteLocalRef(env, graphicsEnv);
}); });
}]; }];
} }
......
/* /*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -788,7 +788,7 @@ public class Base64 { ...@@ -788,7 +788,7 @@ public class Base64 {
public void write(byte[] b, int off, int len) throws IOException { public void write(byte[] b, int off, int len) throws IOException {
if (closed) if (closed)
throw new IOException("Stream is closed"); throw new IOException("Stream is closed");
if (off < 0 || len < 0 || off + len > b.length) if (off < 0 || len < 0 || len > b.length - off)
throw new ArrayIndexOutOfBoundsException(); throw new ArrayIndexOutOfBoundsException();
if (len == 0) if (len == 0)
return; return;
......
...@@ -125,7 +125,9 @@ public class JarURLConnection extends java.net.JarURLConnection { ...@@ -125,7 +125,9 @@ public class JarURLConnection extends java.net.JarURLConnection {
* to get the jarFile, and set it as our permission. * to get the jarFile, and set it as our permission.
*/ */
if (getUseCaches()) { if (getUseCaches()) {
boolean oldUseCaches = jarFileURLConnection.getUseCaches();
jarFileURLConnection = factory.getConnection(jarFile); jarFileURLConnection = factory.getConnection(jarFile);
jarFileURLConnection.setUseCaches(oldUseCaches);
} }
if ((entryName != null)) { if ((entryName != null)) {
......
...@@ -1115,7 +1115,7 @@ final class AbstractTrustManagerWrapper extends X509ExtendedTrustManager ...@@ -1115,7 +1115,7 @@ final class AbstractTrustManagerWrapper extends X509ExtendedTrustManager
} }
} catch (CertPathValidatorException cpve) { } catch (CertPathValidatorException cpve) {
throw new CertificateException( throw new CertificateException(
"Certificates does not conform to algorithm constraints"); "Certificates do not conform to algorithm constraints", cpve);
} }
} }
} }
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <process.h> #include <process.h>
#include <iphlpapi.h> #include <iphlpapi.h>
#include <icmpapi.h> #include <icmpapi.h>
#include <WinError.h>
#include "java_net_InetAddress.h" #include "java_net_InetAddress.h"
#include "java_net_Inet4AddressImpl.h" #include "java_net_Inet4AddressImpl.h"
...@@ -481,7 +482,15 @@ ping4(JNIEnv *env, ...@@ -481,7 +482,15 @@ ping4(JNIEnv *env,
DWORD ReplySize = 0; DWORD ReplySize = 0;
jboolean ret = JNI_FALSE; jboolean ret = JNI_FALSE;
ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData); // https://msdn.microsoft.com/en-us/library/windows/desktop/aa366051%28v=vs.85%29.aspx
ReplySize = sizeof(ICMP_ECHO_REPLY) // The buffer should be large enough
// to hold at least one ICMP_ECHO_REPLY
// structure
+ sizeof(SendData) // plus RequestSize bytes of data.
+ 8; // This buffer should also be large enough
// to also hold 8 more bytes of data
// (the size of an ICMP error message)
ReplyBuffer = (VOID*) malloc(ReplySize); ReplyBuffer = (VOID*) malloc(ReplySize);
if (ReplyBuffer == NULL) { if (ReplyBuffer == NULL) {
IcmpCloseHandle(hIcmpFile); IcmpCloseHandle(hIcmpFile);
...@@ -517,10 +526,45 @@ ping4(JNIEnv *env, ...@@ -517,10 +526,45 @@ ping4(JNIEnv *env,
(timeout < 1000) ? 1000 : timeout); // DWORD Timeout (timeout < 1000) ? 1000 : timeout); // DWORD Timeout
} }
if (dwRetVal != 0) { if (dwRetVal == 0) { // if the call failed
TCHAR *buf;
DWORD err = WSAGetLastError();
switch (err) {
case ERROR_NO_NETWORK:
case ERROR_NETWORK_UNREACHABLE:
case ERROR_HOST_UNREACHABLE:
case ERROR_PROTOCOL_UNREACHABLE:
case ERROR_PORT_UNREACHABLE:
case ERROR_REQUEST_ABORTED:
case ERROR_INCORRECT_ADDRESS:
case ERROR_HOST_DOWN:
case WSAEHOSTUNREACH: /* Host Unreachable */
case WSAENETUNREACH: /* Network Unreachable */
case WSAENETDOWN: /* Network is down */
case WSAEPFNOSUPPORT: /* Protocol Family unsupported */
case IP_REQ_TIMED_OUT:
break;
default:
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&buf, 0, NULL);
NET_ThrowNew(env, err, buf);
LocalFree(buf);
break;
}
} else {
PICMP_ECHO_REPLY pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer; PICMP_ECHO_REPLY pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer;
if ((int)pEchoReply->RoundTripTime <= timeout)
// This is to take into account the undocumented minimum
// timeout mentioned in the IcmpSendEcho call above.
// We perform an extra check to make sure that our
// roundtrip time was less than our desired timeout
// for cases where that timeout is < 1000ms.
if (pEchoReply->Status == IP_SUCCESS
&& (int)pEchoReply->RoundTripTime <= timeout)
{
ret = JNI_TRUE; ret = JNI_TRUE;
}
} }
free(ReplyBuffer); free(ReplyBuffer);
......
...@@ -394,6 +394,7 @@ needs_jre = \ ...@@ -394,6 +394,7 @@ needs_jre = \
javax/management/mxbean/LeakTest.java \ javax/management/mxbean/LeakTest.java \
javax/management/mxbean/MXBeanTest.java \ javax/management/mxbean/MXBeanTest.java \
javax/management/mxbean/PropertyNamesTest.java \ javax/management/mxbean/PropertyNamesTest.java \
javax/xml/bind/marshal/8134111/UnmarshalTest.java \
javax/xml/ws/8043129 \ javax/xml/ws/8043129 \
jdk/lambda/vm/InterfaceAccessFlagsTest.java \ jdk/lambda/vm/InterfaceAccessFlagsTest.java \
sun/misc/URLClassPath/ClassnameCharTest.java \ sun/misc/URLClassPath/ClassnameCharTest.java \
...@@ -566,6 +567,7 @@ needs_compact2 = \ ...@@ -566,6 +567,7 @@ needs_compact2 = \
java/net/HttpCookie/IllegalCookieNameTest.java \ java/net/HttpCookie/IllegalCookieNameTest.java \
java/net/HttpURLConnection/UnmodifiableMaps.java \ java/net/HttpURLConnection/UnmodifiableMaps.java \
java/net/ResponseCache/Test.java \ java/net/ResponseCache/Test.java \
java/net/SetFactoryPermission/SetFactoryPermission.java \
java/net/URLClassLoader/ClassLoad.java \ java/net/URLClassLoader/ClassLoad.java \
java/net/URLClassLoader/closetest/CloseTest.java \ java/net/URLClassLoader/closetest/CloseTest.java \
java/net/URLPermission/URLTest.java \ java/net/URLPermission/URLTest.java \
......
/*
* 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.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
@test
@bug 8160570
@summary Tests that a modal dialog receives WINDOW_ACTIVATED & WINDOW_GAINED_FOCUS on first show.
*/
public class ModalDialogActivationTest {
static final Object lock = new Object();
static volatile boolean activated;
static volatile boolean focused;
public static void main(String[] args) throws InterruptedException {
EventQueue.invokeLater(() -> runGUI());
long time = System.currentTimeMillis();
synchronized (lock) {
while (!activated || !focused) {
lock.wait(5000);
if (System.currentTimeMillis() - time >= 5000) break;
}
}
if (!activated || !focused) {
throw new RuntimeException("Test FAILED: activated: " + activated + ", focused: " + focused);
}
System.out.println("Test PASSED");
}
static void runGUI() {
JFrame f = new JFrame("frame");
final JDialog d = new MyModalDialog(f, "dialog");
d.addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
synchronized (lock) {
activated = true;
lock.notifyAll();
}
}
});
d.addWindowFocusListener(new WindowAdapter() {
@Override
public void windowGainedFocus(WindowEvent e) {
synchronized (lock) {
focused = true;
lock.notifyAll();
}
}
});
f.setVisible(true);
d.setVisible(true);
}
static class MyModalDialog extends JDialog {
public MyModalDialog(Frame owner, String title)ª {
super(owner, title, true);
}
@Override
public boolean getFocusableWindowState() {
try {
// let Toolkit thread go ahead
Thread.sleep(100);
} catch (InterruptedException ignore) {
}
return super.getFocusableWindowState();
}
}
}
/* /*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,8 +23,11 @@ ...@@ -23,8 +23,11 @@
/** /**
* @test 4235519 8004212 8005394 8007298 8006295 8006315 8006530 8007379 8008925 * @test 4235519 8004212 8005394 8007298 8006295 8006315 8006530 8007379 8008925
* 8014217 8025003 8026330 8028397 * 8014217 8025003 8026330 8028397 8165243
* @summary tests java.util.Base64 * @summary tests java.util.Base64
* @library /lib/testlibrary
* @build jdk.testlibrary.*
* @run main TestBase64
*/ */
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
...@@ -34,11 +37,17 @@ import java.io.IOException; ...@@ -34,11 +37,17 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Arrays; import java.util.Arrays;
import java.util.ArrayList;
import java.util.Base64; import java.util.Base64;
import java.util.List;
import java.util.Random; import java.util.Random;
import jdk.testlibrary.RandomFactory;
public class TestBase64 { public class TestBase64 {
private static final Random rnd = RandomFactory.getRandom();
public static void main(String args[]) throws Throwable { public static void main(String args[]) throws Throwable {
int numRuns = 10; int numRuns = 10;
int numBytes = 200; int numBytes = 200;
...@@ -51,7 +60,6 @@ public class TestBase64 { ...@@ -51,7 +60,6 @@ public class TestBase64 {
test(Base64.getUrlEncoder(), Base64.getUrlDecoder(), numRuns, numBytes); test(Base64.getUrlEncoder(), Base64.getUrlDecoder(), numRuns, numBytes);
test(Base64.getMimeEncoder(), Base64.getMimeDecoder(), numRuns, numBytes); test(Base64.getMimeEncoder(), Base64.getMimeDecoder(), numRuns, numBytes);
Random rnd = new java.util.Random();
byte[] nl_1 = new byte[] {'\n'}; byte[] nl_1 = new byte[] {'\n'};
byte[] nl_2 = new byte[] {'\n', '\r'}; byte[] nl_2 = new byte[] {'\n', '\r'};
byte[] nl_3 = new byte[] {'\n', '\r', '\n'}; byte[] nl_3 = new byte[] {'\n', '\r', '\n'};
...@@ -75,7 +83,7 @@ public class TestBase64 { ...@@ -75,7 +83,7 @@ public class TestBase64 {
testNull(Base64.getDecoder()); testNull(Base64.getDecoder());
testNull(Base64.getUrlDecoder()); testNull(Base64.getUrlDecoder());
testNull(Base64.getMimeDecoder()); testNull(Base64.getMimeDecoder());
checkNull(new Runnable() { public void run() { Base64.getMimeEncoder(10, null); }}); checkNull(() -> Base64.getMimeEncoder(10, null));
testIOE(Base64.getEncoder()); testIOE(Base64.getEncoder());
testIOE(Base64.getUrlEncoder()); testIOE(Base64.getUrlEncoder());
...@@ -83,26 +91,23 @@ public class TestBase64 { ...@@ -83,26 +91,23 @@ public class TestBase64 {
testIOE(Base64.getMimeEncoder(10, new byte[]{'\n'})); testIOE(Base64.getMimeEncoder(10, new byte[]{'\n'}));
byte[] src = new byte[1024]; byte[] src = new byte[1024];
new Random().nextBytes(src); rnd.nextBytes(src);
final byte[] decoded = Base64.getEncoder().encode(src); final byte[] decoded = Base64.getEncoder().encode(src);
testIOE(Base64.getDecoder(), decoded); testIOE(Base64.getDecoder(), decoded);
testIOE(Base64.getMimeDecoder(), decoded); testIOE(Base64.getMimeDecoder(), decoded);
testIOE(Base64.getUrlDecoder(), Base64.getUrlEncoder().encode(src)); testIOE(Base64.getUrlDecoder(), Base64.getUrlEncoder().encode(src));
// illegal line separator // illegal line separator
checkIAE(new Runnable() { public void run() { Base64.getMimeEncoder(10, new byte[]{'\r', 'N'}); }}); checkIAE(() -> Base64.getMimeEncoder(10, new byte[]{'\r', 'N'}));
// malformed padding/ending // malformed padding/ending
testMalformedPadding(); testMalformedPadding();
// illegal base64 character // illegal base64 character
decoded[2] = (byte)0xe0; decoded[2] = (byte)0xe0;
checkIAE(new Runnable() { checkIAE(() -> Base64.getDecoder().decode(decoded));
public void run() { Base64.getDecoder().decode(decoded); }}); checkIAE(() -> Base64.getDecoder().decode(decoded, new byte[1024]));
checkIAE(new Runnable() { checkIAE(() -> Base64.getDecoder().decode(ByteBuffer.wrap(decoded)));
public void run() { Base64.getDecoder().decode(decoded, new byte[1024]); }});
checkIAE(new Runnable() { public void run() {
Base64.getDecoder().decode(ByteBuffer.wrap(decoded)); }});
// test single-non-base64 character for mime decoding // test single-non-base64 character for mime decoding
testSingleNonBase64MimeDec(); testSingleNonBase64MimeDec();
...@@ -112,6 +117,16 @@ public class TestBase64 { ...@@ -112,6 +117,16 @@ public class TestBase64 {
// test mime decoding with ignored character after padding // test mime decoding with ignored character after padding
testDecodeIgnoredAfterPadding(); testDecodeIgnoredAfterPadding();
// given invalid args, encoder should not produce output
testEncoderKeepsSilence(Base64.getEncoder());
testEncoderKeepsSilence(Base64.getUrlEncoder());
testEncoderKeepsSilence(Base64.getMimeEncoder());
// given invalid args, decoder should not consume input
testDecoderKeepsAbstinence(Base64.getDecoder());
testDecoderKeepsAbstinence(Base64.getUrlDecoder());
testDecoderKeepsAbstinence(Base64.getMimeDecoder());
} }
private static sun.misc.BASE64Encoder sunmisc = new sun.misc.BASE64Encoder(); private static sun.misc.BASE64Encoder sunmisc = new sun.misc.BASE64Encoder();
...@@ -282,48 +297,49 @@ public class TestBase64 { ...@@ -282,48 +297,49 @@ public class TestBase64 {
private static final String str_null = null; private static final String str_null = null;
private static final ByteBuffer bb_null = null; private static final ByteBuffer bb_null = null;
private static void testNull(final Base64.Encoder enc) { private static void testNull(Base64.Encoder enc) {
checkNull(new Runnable() { public void run() { enc.encode(ba_null); }}); checkNull(() -> enc.encode(ba_null));
checkNull(new Runnable() { public void run() { enc.encodeToString(ba_null); }}); checkNull(() -> enc.encodeToString(ba_null));
checkNull(new Runnable() { public void run() { enc.encode(ba_null, new byte[10]); }}); checkNull(() -> enc.encode(ba_null, new byte[10]));
checkNull(new Runnable() { public void run() { enc.encode(new byte[10], ba_null); }}); checkNull(() -> enc.encode(new byte[10], ba_null));
checkNull(new Runnable() { public void run() { enc.encode(bb_null); }}); checkNull(() -> enc.encode(bb_null));
checkNull(new Runnable() { public void run() { enc.wrap((OutputStream)null); }}); checkNull(() -> enc.wrap((OutputStream)null));
} }
private static void testNull(final Base64.Decoder dec) { private static void testNull(Base64.Decoder dec) {
checkNull(new Runnable() { public void run() { dec.decode(ba_null); }}); checkNull(() -> dec.decode(ba_null));
checkNull(new Runnable() { public void run() { dec.decode(str_null); }}); checkNull(() -> dec.decode(str_null));
checkNull(new Runnable() { public void run() { dec.decode(ba_null, new byte[10]); }}); checkNull(() -> dec.decode(ba_null, new byte[10]));
checkNull(new Runnable() { public void run() { dec.decode(new byte[10], ba_null); }}); checkNull(() -> dec.decode(new byte[10], ba_null));
checkNull(new Runnable() { public void run() { dec.decode(bb_null); }}); checkNull(() -> dec.decode(bb_null));
checkNull(new Runnable() { public void run() { dec.wrap((InputStream)null); }}); checkNull(() -> dec.wrap((InputStream)null));
} }
@FunctionalInterface
private static interface Testable { private static interface Testable {
public void test() throws Throwable; public void test() throws Throwable;
} }
private static void testIOE(final Base64.Encoder enc) throws Throwable { private static void testIOE(Base64.Encoder enc) throws Throwable {
ByteArrayOutputStream baos = new ByteArrayOutputStream(8192); ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
final OutputStream os = enc.wrap(baos); OutputStream os = enc.wrap(baos);
os.write(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9}); os.write(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9});
os.close(); os.close();
checkIOE(new Testable() { public void test() throws Throwable { os.write(10); }}); checkIOE(() -> os.write(10));
checkIOE(new Testable() { public void test() throws Throwable { os.write(new byte[] {10}); }}); checkIOE(() -> os.write(new byte[] {10}));
checkIOE(new Testable() { public void test() throws Throwable { os.write(new byte[] {10}, 1, 4); }}); checkIOE(() -> os.write(new byte[] {10}, 1, 4));
} }
private static void testIOE(final Base64.Decoder dec, byte[] decoded) throws Throwable { private static void testIOE(Base64.Decoder dec, byte[] decoded) throws Throwable {
ByteArrayInputStream bais = new ByteArrayInputStream(decoded); ByteArrayInputStream bais = new ByteArrayInputStream(decoded);
final InputStream is = dec.wrap(bais); InputStream is = dec.wrap(bais);
is.read(new byte[10]); is.read(new byte[10]);
is.close(); is.close();
checkIOE(new Testable() { public void test() throws Throwable { is.read(); }}); checkIOE(() -> is.read());
checkIOE(new Testable() { public void test() throws Throwable { is.read(new byte[] {10}); }}); checkIOE(() -> is.read(new byte[] {10}));
checkIOE(new Testable() { public void test() throws Throwable { is.read(new byte[] {10}, 1, 4); }}); checkIOE(() -> is.read(new byte[] {10}, 1, 4));
checkIOE(new Testable() { public void test() throws Throwable { is.available(); }}); checkIOE(() -> is.available());
checkIOE(new Testable() { public void test() throws Throwable { is.skip(20); }}); checkIOE(() -> is.skip(20));
} }
private static final void checkNull(Runnable r) { private static final void checkNull(Runnable r) {
...@@ -415,13 +431,13 @@ public class TestBase64 { ...@@ -415,13 +431,13 @@ public class TestBase64 {
int pos = (Integer)data[i + 2]; int pos = (Integer)data[i + 2];
// decode(byte[]) // decode(byte[])
checkIAE(new Runnable() { public void run() { dec.decode(srcBytes); }}); checkIAE(() -> dec.decode(srcBytes));
// decode(String) // decode(String)
checkIAE(new Runnable() { public void run() { dec.decode(srcStr); }}); checkIAE(() -> dec.decode(srcStr));
// decode(ByteBuffer) // decode(ByteBuffer)
checkIAE(new Runnable() { public void run() { dec.decode(srcBB); }}); checkIAE(() -> dec.decode(srcBB));
// wrap stream // wrap stream
checkIOE(new Testable() { checkIOE(new Testable() {
...@@ -531,4 +547,67 @@ public class TestBase64 { ...@@ -531,4 +547,67 @@ public class TestBase64 {
} }
return ret; return ret;
} }
private static void testEncoderKeepsSilence(Base64.Encoder enc)
throws Throwable {
List<Integer> vals = Arrays.asList(Integer.MIN_VALUE,
Integer.MIN_VALUE + 1, -1111, -2, -1, 0, 1, 2, 3, 1111,
Integer.MAX_VALUE - 1, Integer.MAX_VALUE,
rnd.nextInt(), rnd.nextInt(), rnd.nextInt(),
rnd.nextInt());
byte[] buf = new byte[] {1, 0, 91};
for (int off : vals) {
for (int len : vals) {
if (off >= 0 && len >= 0 && off <= buf.length - len) {
// valid args, skip them
continue;
}
// invalid args, test them
System.out.println("testing off=" + off + ", len=" + len);
ByteArrayOutputStream baos = new ByteArrayOutputStream(100);
try (OutputStream os = enc.wrap(baos)) {
os.write(buf, off, len);
throw new RuntimeException("Expected IOOBEx was not thrown");
} catch (IndexOutOfBoundsException expected) {
}
if (baos.size() > 0)
throw new RuntimeException("No output was expected, but got "
+ baos.size() + " bytes");
}
}
}
private static void testDecoderKeepsAbstinence(Base64.Decoder dec)
throws Throwable {
List<Integer> vals = Arrays.asList(Integer.MIN_VALUE,
Integer.MIN_VALUE + 1, -1111, -2, -1, 0, 1, 2, 3, 1111,
Integer.MAX_VALUE - 1, Integer.MAX_VALUE,
rnd.nextInt(), rnd.nextInt(), rnd.nextInt(),
rnd.nextInt());
byte[] buf = new byte[3];
for (int off : vals) {
for (int len : vals) {
if (off >= 0 && len >= 0 && off <= buf.length - len) {
// valid args, skip them
continue;
}
// invalid args, test them
System.out.println("testing off=" + off + ", len=" + len);
String input = "AAAAAAAAAAAAAAAAAAAAAA";
ByteArrayInputStream bais =
new ByteArrayInputStream(input.getBytes("Latin1"));
try (InputStream is = dec.wrap(bais)) {
is.read(buf, off, len);
throw new RuntimeException("Expected IOOBEx was not thrown");
} catch (IndexOutOfBoundsException expected) {
}
if (bais.available() != input.length())
throw new RuntimeException("No input should be consumed, "
+ "but consumed " + (input.length() - bais.available())
+ " bytes");
}
}
}
} }
/*
* 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.
*
* 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 6947916
* @summary JarURLConnection does not handle useCaches correctly
* @run main/othervm JarURLConnectionUseCaches
*/
import java.io.*;
import java.net.JarURLConnection;
import java.net.URL;
import java.util.jar.*;
public class JarURLConnectionUseCaches {
public static void main( String[] args ) throws IOException {
JarOutputStream out = new JarOutputStream(
new FileOutputStream("usecache.jar"));
out.putNextEntry(new JarEntry("test.txt"));
out.write("Test txt file".getBytes());
out.closeEntry();
out.close();
URL url = new URL("jar:"
+ new File(".").toURI().toString()
+ "/usecache.jar!/test.txt");
JarURLConnection c1 = (JarURLConnection)url.openConnection();
c1.setDefaultUseCaches( false );
c1.setUseCaches( true );
c1.connect();
JarURLConnection c2 = (JarURLConnection)url.openConnection();
c2.setDefaultUseCaches( false );
c2.setUseCaches( true );
c2.connect();
c1.getInputStream().close();
c2.getInputStream().read();
c2.getInputStream().close();
}
}
...@@ -30,12 +30,13 @@ ...@@ -30,12 +30,13 @@
/* /*
* @test * @test
* @bug 7113275 * @bug 7113275 8164846
* @summary compatibility issue with MD2 trust anchor and old X509TrustManager * @summary compatibility issue with MD2 trust anchor and old X509TrustManager
* @run main/othervm TrustTrustedCert PKIX TLSv1.1 * @run main/othervm TrustTrustedCert PKIX TLSv1.1 true
* @run main/othervm TrustTrustedCert SunX509 TLSv1.1 * @run main/othervm TrustTrustedCert PKIX TLSv1.1 false
* @run main/othervm TrustTrustedCert PKIX TLSv1.2 * @run main/othervm TrustTrustedCert SunX509 TLSv1.1 false
* @run main/othervm TrustTrustedCert SunX509 TLSv1.2 * @run main/othervm TrustTrustedCert PKIX TLSv1.2 false
* @run main/othervm TrustTrustedCert SunX509 TLSv1.2 false
*/ */
import java.net.*; import java.net.*;
...@@ -181,23 +182,32 @@ public class TrustTrustedCert { ...@@ -181,23 +182,32 @@ public class TrustTrustedCert {
Thread.sleep(50); Thread.sleep(50);
} }
SSLContext context = generateSSLContext(); SSLSocket sslSocket = null;
SSLSocketFactory sslsf = context.getSocketFactory(); try {
SSLContext context = generateSSLContext();
SSLSocket sslSocket = SSLSocketFactory sslsf = context.getSocketFactory();
(SSLSocket)sslsf.createSocket("localhost", serverPort);
sslSocket = (SSLSocket)sslsf.createSocket("localhost", serverPort);
// enable the specified TLS protocol
sslSocket.setEnabledProtocols(new String[] {tlsProtocol}); // enable the specified TLS protocol
sslSocket.setEnabledProtocols(new String[] {tlsProtocol});
InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream(); InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream();
sslOS.write('B'); sslOS.write('B');
sslOS.flush(); sslOS.flush();
sslIS.read(); sslIS.read();
} catch (SSLHandshakeException e) {
sslSocket.close(); // focus in on the CertPathValidatorException
Throwable t = e.getCause().getCause();
if ((t == null) || (expectFail &&
!t.toString().contains("MD5withRSA"))) {
throw new RuntimeException(
"Expected to see MD5withRSA in exception output " + t);
}
} finally {
if (sslSocket != null) sslSocket.close();
}
} }
/* /*
...@@ -206,10 +216,13 @@ public class TrustTrustedCert { ...@@ -206,10 +216,13 @@ public class TrustTrustedCert {
*/ */
private static String tmAlgorithm; // trust manager private static String tmAlgorithm; // trust manager
private static String tlsProtocol; // trust manager private static String tlsProtocol; // trust manager
// set this flag to test context of CertificateException
private static boolean expectFail;
private static void parseArguments(String[] args) { private static void parseArguments(String[] args) {
tmAlgorithm = args[0]; tmAlgorithm = args[0];
tlsProtocol = args[1]; tlsProtocol = args[1];
expectFail = Boolean.parseBoolean(args[2]);
} }
private static SSLContext generateSSLContext() throws Exception { private static SSLContext generateSSLContext() throws Exception {
...@@ -232,7 +245,7 @@ public class TrustTrustedCert { ...@@ -232,7 +245,7 @@ public class TrustTrustedCert {
// generate the private key. // generate the private key.
PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec( PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec(
Base64.getMimeDecoder().decode(targetPrivateKey)); Base64.getMimeDecoder().decode(targetPrivateKey));
KeyFactory kf = KeyFactory.getInstance("RSA"); KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPrivateKey priKey = RSAPrivateKey priKey =
(RSAPrivateKey)kf.generatePrivate(priKeySpec); (RSAPrivateKey)kf.generatePrivate(priKeySpec);
...@@ -338,20 +351,25 @@ public class TrustTrustedCert { ...@@ -338,20 +351,25 @@ public class TrustTrustedCert {
volatile Exception clientException = null; volatile Exception clientException = null;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
// MD5 is used in this test case, don't disable MD5 algorithm. /*
Security.setProperty("jdk.certpath.disabledAlgorithms", * Get the customized arguments.
*/
parseArguments(args);
/*
* MD5 is used in this test case, don't disable MD5 algorithm.
* if expectFail is set, we're testing exception message
*/
if (!expectFail) {
Security.setProperty("jdk.certpath.disabledAlgorithms",
"MD2, RSA keySize < 1024"); "MD2, RSA keySize < 1024");
}
Security.setProperty("jdk.tls.disabledAlgorithms", Security.setProperty("jdk.tls.disabledAlgorithms",
"SSLv3, RC4, DH keySize < 768"); "SSLv3, RC4, DH keySize < 768");
if (debug) if (debug)
System.setProperty("javax.net.debug", "all"); System.setProperty("javax.net.debug", "all");
/*
* Get the customized arguments.
*/
parseArguments(args);
/* /*
* Start the tests. * Start the tests.
*/ */
...@@ -376,7 +394,8 @@ public class TrustTrustedCert { ...@@ -376,7 +394,8 @@ public class TrustTrustedCert {
startServer(false); startServer(false);
} }
} catch (Exception e) { } catch (Exception e) {
// swallow for now. Show later System.out.println("Unexpected exception: ");
e.printStackTrace();
} }
/* /*
...@@ -440,7 +459,11 @@ public class TrustTrustedCert { ...@@ -440,7 +459,11 @@ public class TrustTrustedCert {
*/ */
System.err.println("Server died..."); System.err.println("Server died...");
serverReady = true; serverReady = true;
serverException = e; if (!expectFail) {
// only record if we weren't expecting.
// client side will record exception
serverException = e;
}
} }
} }
}; };
...@@ -449,7 +472,11 @@ public class TrustTrustedCert { ...@@ -449,7 +472,11 @@ public class TrustTrustedCert {
try { try {
doServerSide(); doServerSide();
} catch (Exception e) { } catch (Exception e) {
serverException = e; // only record if we weren't expecting.
// client side will record exception
if (!expectFail) {
serverException = e;
}
} finally { } finally {
serverReady = true; serverReady = true;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册