# HG changeset patch # User andrew # Date 1621437153 -3600 # Node ID ba0e36b4275f0962629a5fbcfbacfe883f282548 # Parent 9cd22f676a66ac40e77f7a1aba901a7d3eb298b7# Parent 79198fff6d1d5663e7e06ad9f5bdd6c8778b6f00 Merge diff -r 9cd22f676a66 -r ba0e36b4275f src/share/classes/sun/security/jca/Providers.java --- a/src/share/classes/sun/security/jca/Providers.java Mon May 17 05:47:13 2021 +0100 +++ b/src/share/classes/sun/security/jca/Providers.java Wed May 19 16:12:33 2021 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2020, 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 @@ -86,6 +86,7 @@ // Note: SunEC *is* in a signed JAR file, but it's not signed // by EC itself. So it's still safe to be listed here. "sun.security.ec.SunEC", + "com.sun.crypto.provider.SunJCE", BACKUP_PROVIDER_CLASSNAME, }; diff -r 9cd22f676a66 -r ba0e36b4275f src/share/classes/sun/security/ssl/SSLEngineInputRecord.java --- a/src/share/classes/sun/security/ssl/SSLEngineInputRecord.java Mon May 17 05:47:13 2021 +0100 +++ b/src/share/classes/sun/security/ssl/SSLEngineInputRecord.java Wed May 19 16:12:33 2021 +0100 @@ -287,8 +287,15 @@ } handshakeFrag.mark(); - // skip the first byte: handshake type + + // Fail fast for unknown handshake message. byte handshakeType = handshakeFrag.get(); + if (!SSLHandshake.isKnown(handshakeType)) { + throw new SSLProtocolException( + "Unknown handshake type size, Handshake.msg_type = " + + (handshakeType & 0xFF)); + } + int handshakeBodyLen = Record.getInt24(handshakeFrag); if (handshakeBodyLen > SSLConfiguration.maxHandshakeMessageSize) { throw new SSLProtocolException( diff -r 9cd22f676a66 -r ba0e36b4275f src/share/classes/sun/security/ssl/SSLHandshake.java --- a/src/share/classes/sun/security/ssl/SSLHandshake.java Mon May 17 05:47:13 2021 +0100 +++ b/src/share/classes/sun/security/ssl/SSLHandshake.java Wed May 19 16:12:33 2021 +0100 @@ -478,6 +478,16 @@ return "UNKNOWN-HANDSHAKE-MESSAGE(" + id + ")"; } + static boolean isKnown(byte id) { + for (SSLHandshake hs : SSLHandshake.values()) { + if (hs.id == id && id != NOT_APPLICABLE.id) { + return true; + } + } + + return false; + } + static final void kickstart(HandshakeContext context) throws IOException { if (context instanceof ClientHandshakeContext) { // For initial handshaking, including session resumption, diff -r 9cd22f676a66 -r ba0e36b4275f src/share/classes/sun/security/ssl/SSLSocketInputRecord.java --- a/src/share/classes/sun/security/ssl/SSLSocketInputRecord.java Mon May 17 05:47:13 2021 +0100 +++ b/src/share/classes/sun/security/ssl/SSLSocketInputRecord.java Wed May 19 16:12:33 2021 +0100 @@ -302,8 +302,15 @@ } handshakeFrag.mark(); - // skip the first byte: handshake type + + // Fail fast for unknown handshake message. byte handshakeType = handshakeFrag.get(); + if (!SSLHandshake.isKnown(handshakeType)) { + throw new SSLProtocolException( + "Unknown handshake type size, Handshake.msg_type = " + + (handshakeType & 0xFF)); + } + int handshakeBodyLen = Record.getInt24(handshakeFrag); if (handshakeBodyLen > SSLConfiguration.maxHandshakeMessageSize) { throw new SSLProtocolException( diff -r 9cd22f676a66 -r ba0e36b4275f src/share/classes/sun/security/tools/KeyStoreUtil.java --- a/src/share/classes/sun/security/tools/KeyStoreUtil.java Mon May 17 05:47:13 2021 +0100 +++ b/src/share/classes/sun/security/tools/KeyStoreUtil.java Wed May 19 16:12:33 2021 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2020, 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 @@ -39,6 +39,7 @@ import java.text.Collator; import java.util.Locale; +import java.util.ResourceBundle; /** *
This class provides several utilities to KeyStore
.
@@ -53,12 +54,6 @@
private static final String JKS = "jks";
- private static final Collator collator = Collator.getInstance();
- static {
- // this is for case insensitive string comparisons
- collator.setStrength(Collator.PRIMARY);
- };
-
/**
* Returns true if the certificate is self-signed, false otherwise.
*/
@@ -123,7 +118,8 @@
}
public static char[] getPassWithModifier(String modifier, String arg,
- java.util.ResourceBundle rb) {
+ ResourceBundle rb,
+ Collator collator) {
if (modifier == null) {
return arg.toCharArray();
} else if (collator.compare(modifier, "env") == 0) {
diff -r 9cd22f676a66 -r ba0e36b4275f src/share/classes/sun/security/tools/jarsigner/Main.java
--- a/src/share/classes/sun/security/tools/jarsigner/Main.java Mon May 17 05:47:13 2021 +0100
+++ b/src/share/classes/sun/security/tools/jarsigner/Main.java Wed May 19 16:12:33 2021 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2020, 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
@@ -521,7 +521,8 @@
}
static char[] getPass(String modifier, String arg) {
- char[] output = KeyStoreUtil.getPassWithModifier(modifier, arg, rb);
+ char[] output =
+ KeyStoreUtil.getPassWithModifier(modifier, arg, rb, collator);
if (output != null) return output;
usage();
return null; // Useless, usage() already exit
diff -r 9cd22f676a66 -r ba0e36b4275f src/share/classes/sun/security/tools/keytool/Main.java
--- a/src/share/classes/sun/security/tools/keytool/Main.java Mon May 17 05:47:13 2021 +0100
+++ b/src/share/classes/sun/security/tools/keytool/Main.java Wed May 19 16:12:33 2021 +0100
@@ -4526,7 +4526,8 @@
}
private char[] getPass(String modifier, String arg) {
- char[] output = KeyStoreUtil.getPassWithModifier(modifier, arg, rb);
+ char[] output =
+ KeyStoreUtil.getPassWithModifier(modifier, arg, rb, collator);
if (output != null) return output;
tinyHelp();
return null; // Useless, tinyHelp() already exits.
diff -r 9cd22f676a66 -r ba0e36b4275f src/windows/native/sun/windows/awt_DnDDT.cpp
--- a/src/windows/native/sun/windows/awt_DnDDT.cpp Mon May 17 05:47:13 2021 +0100
+++ b/src/windows/native/sun/windows/awt_DnDDT.cpp Wed May 19 16:12:33 2021 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021, 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
@@ -133,6 +133,7 @@
HRESULT __stdcall AwtDropTarget::DragEnter(IDataObject __RPC_FAR *pDataObj, DWORD grfKeyState, POINTL pt, DWORD __RPC_FAR *pdwEffect) {
TRY;
+ AwtToolkit::GetInstance().isInDoDragDropLoop = TRUE;
if (NULL != m_pIDropTargetHelper) {
m_pIDropTargetHelper->DragEnter(
m_window,
@@ -152,6 +153,7 @@
(IsLocalDnD() && !IsLocalDataObject(pDataObj)))
{
*pdwEffect = retEffect;
+ AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
return ret;
}
@@ -163,6 +165,7 @@
}
if (JNU_IsNull(env, m_dtcp) || !JNU_IsNull(env, safe_ExceptionOccurred(env))) {
+ AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
return ret;
}
@@ -188,10 +191,12 @@
env->ExceptionDescribe();
env->ExceptionClear();
actions = java_awt_dnd_DnDConstants_ACTION_NONE;
+ AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
}
} catch (std::bad_alloc&) {
retEffect = ::convertActionsToDROPEFFECT(actions);
*pdwEffect = retEffect;
+ AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
throw;
}
@@ -405,6 +410,7 @@
m_dropSuccess = success;
m_dropActions = action;
AwtToolkit::GetInstance().QuitMessageLoop(AwtToolkit::EXIT_ENCLOSING_LOOP);
+ AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
}
/**
@@ -1119,6 +1125,7 @@
void AwtDropTarget::DragCleanup(void) {
UnloadCache();
+ AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
}
BOOL AwtDropTarget::IsLocalDataObject(IDataObject __RPC_FAR *pDataObject) {
diff -r 9cd22f676a66 -r ba0e36b4275f test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java
--- a/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java Mon May 17 05:47:13 2021 +0100
+++ b/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java Wed May 19 16:12:33 2021 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, 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
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4183169
+ * @bug 4183169 8032050
* @summary Minor problem with the way ReliableLog handles IOExceptions.
*
* @author Laird Dornin; code borrowed from Ann Wollrath
@@ -36,6 +36,7 @@
import java.rmi.activation.*;
import java.rmi.*;
import java.util.Properties;
+import java.util.concurrent.TimeoutException;
/**
* The test creates an rmid with a special security manager. After
@@ -51,7 +52,7 @@
* (after that time, the test will fail).
*/
public class ShutdownGracefully
- extends Activatable implements Runnable, RegisteringActivatable
+ extends Activatable implements RegisteringActivatable
{
private static RegisteringActivatable registering = null;
@@ -61,6 +62,8 @@
RMID rmid = null;
+ // Save exception if there is a exception or expected behavior
+ Exception exception = null;
System.err.println("\nRegression test for bug/rfe 4183169\n");
try {
@@ -132,101 +135,37 @@
desc = new ActivationDesc(secondGroupID,
"ShutdownGracefully", null, null);
+ /*
+ * registration request is expected to be failed. succeeded case
+ * should be recorded. And raise error after clean up rmid.
+ */
try {
registering = (RegisteringActivatable)
Activatable.register(desc);
-
- System.err.println("second activate and deactivate " +
- "object via method call");
+ System.err.println("The registration request succeeded unexpectedly");
+ exception = new RuntimeException("The registration request succeeded unexpectedly");
} catch (ActivationException e) {
System.err.println("received exception from registration " +
"call that should have failed...");
- }
-
- /*
- * no longer needed because the security manager
- * throws an exception during snapshot
- */
- /*
- try {
- registering.shutdown();
-
- System.err.println("received exception from remote " +
- "call that should have failed...");
- } catch (RemoteException e) {
- }
- */
-
- } catch (Exception e) {
- TestLibrary.bomb("\nfailure: unexpected exception ", e);
- } finally {
- try {
- Thread.sleep(4000);
- } catch (InterruptedException e) {
- }
-
- registering = null;
-
- // Need to make sure that rmid goes away by itself
- JavaVM rmidProcess = rmid;
- if (rmidProcess != null) {
+ // Need wait rmid process terminates.
try {
- Runnable waitThread =
- new ShutdownDetectThread(rmidProcess);
-
- synchronized (waitThread) {
- (new Thread(waitThread)).start();
- waitThread.wait(SHUTDOWN_TIMEOUT);
- System.err.println("rmid has shutdown");
-
- if (!rmidDone) {
- // ensure that this rmid does not infect
- // other tests.
- rmidProcess.destroy();
- TestLibrary.bomb("rmid did not shutdown " +
- "gracefully in time");
- }
- }
- } catch (Exception e) {
- TestLibrary.bomb("exception waiting for rmid " +
- "to shut down");
+ int exitCode = rmid.waitFor(SHUTDOWN_TIMEOUT);
+ System.err.println("RMID has exited gracefully with exitcode:" + exitCode);
+ rmid = null;
+ } catch (TimeoutException te) {
+ System.err.println("RMID process has not exited in given time");
+ exception = te;
}
}
- // else rmid should be down
- }
-
- System.err.println
- ("\nsuccess: ShutdownGracefully test passed ");
- }
-
- private static boolean rmidDone = false;
-
- /**
- * class that waits for rmid to exit
- */
- private static class ShutdownDetectThread implements Runnable {
- private JavaVM rmidProcess = null;
-
- ShutdownDetectThread(JavaVM rmidProcess) {
- this.rmidProcess = rmidProcess;
+ } catch (Exception e) {
+ System.err.println("Exception thrown:" + e);
+ exception = e;
+ } finally {
+ if (rmid != null)
+ rmid.destroy();
}
- public void run() {
- System.err.println("waiting for rmid to shutdown");
-
- try {
- rmidProcess.waitFor();
- } catch (InterruptedException e) {
- // should not happen
- }
-
- synchronized (this) {
- // notify parent thread when rmid has exited
- this.notify();
- rmidDone = true;
- }
-
- RMID.removeLog();
- }
+ if (exception != null)
+ TestLibrary.bomb("\nexception thrown in test: ", exception);
}
/**
@@ -240,23 +179,12 @@
}
/**
- * Spawns a thread to deactivate the object.
+ * Deactivates the object. We need to unexport forcibly because this call
+ * in-progress on this object, which is the same object that we are trying
+ * to deactivate.
*/
public void shutdown() throws Exception {
- (new Thread(this, "ShutdownGracefully")).start();
- }
-
- /**
- * Thread to deactivate object. First attempts to make object
- * inactive (via the inactive method). If that fails (the
- * object may still have pending/executing calls), then
- * unexport the object forcibly.
- */
- public void run() {
- try {
- Thread.sleep(50 * 1000);
- } catch (InterruptedException e) {
- }
+ Activatable.unexportObject(this, true);
ActivationLibrary.deactivate(this, getID());
}
}
diff -r 9cd22f676a66 -r ba0e36b4275f test/java/rmi/testlibrary/JavaVM.java
--- a/test/java/rmi/testlibrary/JavaVM.java Mon May 17 05:47:13 2021 +0100
+++ b/test/java/rmi/testlibrary/JavaVM.java Wed May 19 16:12:33 2021 +0100
@@ -26,6 +26,7 @@
import java.io.OutputStream;
import java.util.Arrays;
import java.util.StringTokenizer;
+import java.util.concurrent.TimeoutException;
/**
* RMI regression test utility class that uses Runtime.exec to spawn a
@@ -189,6 +190,40 @@
}
/**
+ * Causes the current thread to wait the vm process to exit, if necessary,
+ * wait until the vm process has terminated, or the specified waiting time
+ * elapses. Release allocated input/output after vm process has terminated.
+ * @param timeout the maximum milliseconds to wait.
+ * @return exit value for vm process.
+ * @throws InterruptedException if the current thread is interrupted
+ * while waiting.
+ * @throws TimeoutException if subprocess does not end after timeout
+ * milliseconds passed
+ */
+ public int waitFor(long timeout)
+ throws InterruptedException, TimeoutException {
+ if (vm == null)
+ throw new IllegalStateException("can't wait for JavaVM that isn't running");
+ long startTime = System.currentTimeMillis();
+ long rem = timeout;
+
+ do {
+ try {
+ int status = vm.exitValue();
+ outPipe.join();
+ errPipe.join();
+ return status;
+ } catch (IllegalThreadStateException ex) {
+ if (rem > 0) {
+ Thread.sleep(Math.min(rem, 100));
+ }
+ }
+ rem = timeout - (System.currentTimeMillis() - startTime);
+ } while (rem > 0);
+ throw new TimeoutException();
+ }
+
+ /**
* Starts the subprocess, waits for it to exit, and returns its exit status.
*/
public int execute() throws IOException, InterruptedException {
diff -r 9cd22f676a66 -r ba0e36b4275f test/java/security/Policy/SignedJar/SignedJarTest.java
--- a/test/java/security/Policy/SignedJar/SignedJarTest.java Mon May 17 05:47:13 2021 +0100
+++ b/test/java/security/Policy/SignedJar/SignedJarTest.java Wed May 19 16:12:33 2021 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, 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
@@ -32,7 +32,7 @@
/**
* @test
- * @bug 8048360
+ * @bug 8048360 8242565
* @summary test policy entry with signedBy alias
* @library /lib/testlibrary
* @run main/othervm SignedJarTest
@@ -52,6 +52,7 @@
private static final String POLICY2 = "SignedJarTest_2.policy";
private static final String KEYSTORE1 = "both.jks";
private static final String KEYSTORE2 = "first.jks";
+ private static final String SECPROPS = TESTSRC + FS + "java.security";
public static void main(String args[]) throws Throwable {
//copy PrivilegeTest.class, policy files and keystore password file into current direcotry
@@ -147,6 +148,7 @@
"-classpath", classpath,
"-Djava.security.manager",
"-Djava.security.policy=" + policy,
+ "-Djava.security.properties=" + SECPROPS,
"PrivilegeTest",
arg1, arg2};
return cmd;
diff -r 9cd22f676a66 -r ba0e36b4275f test/java/security/Policy/SignedJar/java.security
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/security/Policy/SignedJar/java.security Wed May 19 16:12:33 2021 +0100
@@ -0,0 +1,3 @@
+jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \
+ DSA keySize < 1024, include jdk.disabled.namedCurves, \
+ SHA1 jdkCA & denyAfter 2019-01-01
diff -r 9cd22f676a66 -r ba0e36b4275f test/javax/swing/JRadioButton/8075609/bug8075609.java
--- a/test/javax/swing/JRadioButton/8075609/bug8075609.java Mon May 17 05:47:13 2021 +0100
+++ b/test/javax/swing/JRadioButton/8075609/bug8075609.java Wed May 19 16:12:33 2021 +0100
@@ -35,11 +35,9 @@
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
-import sun.awt.SunToolkit;
public class bug8075609 {
private static Robot robot;
- private static SunToolkit toolkit;
private static JTextField textField;
public static void main(String args[]) throws Throwable {
@@ -53,7 +51,6 @@
Thread.sleep(100);
robot.setAutoDelay(100);
- toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
// Radio button group tab key test
runTest1();
@@ -96,10 +93,10 @@
private static void runTest1() throws Exception{
hitKey(robot, KeyEvent.VK_TAB);
- robot.setAutoDelay(1000 );
+ robot.delay(1000 );
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
- if (textField.hasFocus()) {
+ if (!textField.hasFocus()) {
System.out.println("Radio Button Group Go To Next Component through Tab Key failed");
throw new RuntimeException("Focus is not on textField as Expected");
}
@@ -110,6 +107,6 @@
private static void hitKey(Robot robot, int keycode) {
robot.keyPress(keycode);
robot.keyRelease(keycode);
- toolkit.realSync();
+ robot.waitForIdle();
}
}