This commit is contained in:
Jesper Wilhelmsson 2016-12-08 15:46:19 +01:00
commit 08815157a7
14 changed files with 303 additions and 39 deletions

View File

@ -142,6 +142,9 @@ class CipherBlockChaining extends FeedbackCipher {
*/
int encrypt(byte[] plain, int plainOffset, int plainLen,
byte[] cipher, int cipherOffset) {
if (plainLen <= 0) {
return plainLen;
}
cryptBlockSizeCheck(plainLen);
cryptNullAndBoundsCheck(plain, plainOffset, plainLen);
cryptNullAndBoundsCheck(cipher, cipherOffset, plainLen);
@ -190,6 +193,9 @@ class CipherBlockChaining extends FeedbackCipher {
*/
int decrypt(byte[] cipher, int cipherOffset, int cipherLen,
byte[] plain, int plainOffset) {
if (cipherLen <= 0) {
return cipherLen;
}
cryptBlockSizeCheck(cipherLen);
cryptNullAndBoundsCheck(cipher, cipherOffset, cipherLen);
cryptNullAndBoundsCheck(plain, plainOffset, cipherLen);
@ -220,10 +226,6 @@ class CipherBlockChaining extends FeedbackCipher {
}
private static void cryptNullAndBoundsCheck(byte[] array, int offset, int len) {
if (len <= 0) {
return; // not an error because cryptImpl/decryptImpl won't execute if len <= 0
}
Objects.requireNonNull(array);
if (offset < 0 || offset >= array.length) {

View File

@ -172,10 +172,12 @@ final class CounterMode extends FeedbackCipher {
* are encrypted on demand.
*/
private int crypt(byte[] in, int inOff, int len, byte[] out, int outOff) {
Objects.checkFromIndexSize(inOff, len, in.length);
Objects.checkFromIndexSize(outOff, len, out.length);
return implCrypt(in, inOff, len, out, outOff);
if (len == 0) {
return 0;
}
Objects.checkFromIndexSize(inOff, len, in.length);
Objects.checkFromIndexSize(outOff, len, out.length);
return implCrypt(in, inOff, len, out, outOff);
}
// Implementation of crpyt() method. Possibly replaced with a compiler intrinsic.

View File

@ -157,6 +157,9 @@ class ISO_8859_1
// Method possible replaced with a compiler intrinsic.
private static int encodeISOArray(char[] sa, int sp,
byte[] da, int dp, int len) {
if (len <= 0) {
return 0;
}
encodeISOArrayCheck(sa, sp, da, dp, len);
return implEncodeISOArray(sa, sp, da, dp, len);
}
@ -177,10 +180,6 @@ class ISO_8859_1
private static void encodeISOArrayCheck(char[] sa, int sp,
byte[] da, int dp, int len) {
if (len <= 0) {
return; // not an error because encodeISOArrayImpl won't execute if len <= 0
}
Objects.requireNonNull(sa);
Objects.requireNonNull(da);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 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
@ -51,7 +51,9 @@ import javax.management.remote.TargetedNotification;
import com.sun.jmx.remote.util.ClassLogger;
import com.sun.jmx.remote.util.EnvHelp;
import java.lang.reflect.UndeclaredThrowableException;
import java.rmi.UnmarshalException;
import java.util.concurrent.RejectedExecutionException;
public abstract class ClientNotifForwarder {
@ -559,10 +561,38 @@ public abstract class ClientNotifForwarder {
}
}
} else {
executor.execute(this);
try {
executor.execute(this);
} catch (Exception e) {
if (isRejectedExecutionException(e)) {
// We reached here because the executor was shutdown.
// If executor was supplied by client, then it was shutdown
// abruptly or JMXConnector was shutdown along with executor
// while this thread was suspended at L564.
if (!(executor instanceof LinearExecutor)) {
// Spawn new executor that will do cleanup if JMXConnector is closed
// or keep notif system running otherwise
executor = new LinearExecutor();
executor.execute(this);
}
} else {
throw e;
}
}
}
}
private boolean isRejectedExecutionException(Exception e) {
Throwable cause = e;
while (cause != null) {
if (cause instanceof RejectedExecutionException) {
return true;
}
cause = cause.getCause();
}
return false;
}
void dispatchNotification(TargetedNotification tn,
Integer myListenerID,
Map<Integer, ClientListenerInfo> listeners) {
@ -866,7 +896,7 @@ public abstract class ClientNotifForwarder {
// -------------------------------------------------
private final ClassLoader defaultClassLoader;
private final Executor executor;
private Executor executor;
private final Map<Integer, ClientListenerInfo> infoList =
new HashMap<Integer, ClientListenerInfo>();

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 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
@ -315,10 +315,14 @@ public abstract class MethodImpl extends TypeComponentImpl
return;
}
Value nthArgValue = arguments.get(paramCount - 1);
if (nthArgValue == null) {
if (nthArgValue == null && argCount == paramCount) {
// We have one varargs parameter and it is null
// so we don't have to do anything.
return;
}
Type nthArgType = nthArgValue.type();
// If the first varargs parameter is null, then don't
// access its type since it can't be an array.
Type nthArgType = (nthArgValue == null) ? null : nthArgValue.type();
if (nthArgType instanceof ArrayTypeImpl) {
if (argCount == paramCount &&
((ArrayTypeImpl)nthArgType).isAssignableTo(lastParamType)) {

View File

@ -230,6 +230,8 @@ javax/sound/sampled/Clip/Drain/ClipDrain.java 7062792 generic-all
javax/sound/sampled/Mixers/DisabledAssertionCrash.java 7067310 generic-all
javax/sound/sampled/Clip/OpenNonIntegralNumberOfSampleframes.java 8168881 generic-all
############################################################################
# jdk_imageio

View File

@ -0,0 +1,85 @@
#!/bin/sh
#
# 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 8160024
# @summary jdb returns invalid argument count if first parameter to Arrays.asList is null
#
# @run shell/timeout=300 EvalArraysAsList.sh
#
# The test checks if evaluation of the expression java.util.Arrays.asList(null, "a")
# works normally and does not throw an IllegalArgumentException.
classname=EvalArraysAsList
createJavaFile()
{
cat <<EOF > $classname.java.1
public class $classname {
public static void main(String[] args) {
java.util.List<Object> l = java.util.Arrays.asList(null, "a");
System.out.println("java.util.Arrays.asList(null, \"a\") returns: " + l);
return; // @1 breakpoint
}
}
EOF
}
# drive jdb by sending cmds to it and examining its output
dojdbCmds()
{
setBkpts @1
runToBkpt @1
cmd eval "java.util.Arrays.asList(null, null)"
jdbFailIfPresent "IllegalArgumentException" 3
cmd eval "java.util.Arrays.asList(null, \"a\")"
jdbFailIfPresent "IllegalArgumentException" 3
cmd eval "java.util.Arrays.asList(\"a\", null)"
jdbFailIfPresent "IllegalArgumentException" 3
}
mysetup()
{
if [ -z "$TESTSRC" ] ; then
TESTSRC=.
fi
for ii in . $TESTSRC $TESTSRC/.. ; do
if [ -r "$ii/ShellScaffold.sh" ] ; then
. $ii/ShellScaffold.sh
break
fi
done
}
# You could replace this next line with the contents
# of ShellScaffold.sh and this script will run just the same.
mysetup
runit
pass

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 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
@ -226,9 +226,10 @@ public class DcmdMBeanPermissionsTest {
sm.grantPermission(new RuntimePermission("createClassLoader"));
sm.grantPermission(new ReflectPermission("suppressAccessChecks"));
sm.grantPermission(new java.util.logging.LoggingPermission("control", ""));
sm.grantPermission(new java.lang.RuntimePermission("exitVM.97"));
sm.grantPermission(new java.lang.RuntimePermission("exitVM.*"));
sm.grantPermission(new java.lang.RuntimePermission("modifyThreadGroup"));
sm.grantPermission(new java.lang.RuntimePermission("modifyThread"));
sm.grantPermission(new java.security.SecurityPermission("getProperty.jdk.jar.disabledAlgorithms"));
for(MBeanOperationInfo opInfo : info.getOperations()) {
Permission opPermission = new MBeanPermission(info.getClassName(),
opInfo.getName(),

View File

@ -122,7 +122,7 @@ esac
# Skip unsupported platforms
case `uname -m` in
arm* | ppc* )
arm* | ppc* | s390* )
echo "Test passed. Not supported on current architecture."
exit 0
;;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 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
@ -103,20 +103,13 @@ public class EmptyDomainNotificationTest {
mbsc.invoke(mbean, "emitNotification", null, null);
System.out.println("EmptyDomainNotificationTest-main: waiting notif...");
final long stopTime = System.currentTimeMillis() + 2000;
synchronized(li) {
long toWait = stopTime - System.currentTimeMillis();
while (li.received < 1 && toWait > 0) {
li.wait(toWait);
toWait = stopTime - System.currentTimeMillis();
while (li.received < 1) {
li.wait();
}
}
if (li.received < 1) {
throw new RuntimeException("No notif received!");
} else if (li.received > 1) {
if (li.received != 1) {
throw new RuntimeException("Wait one notif but got: "+li.received);
}

View File

@ -0,0 +1,148 @@
/*
* 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 8141591
* @summary Tests if notifications are received after executor is shutdown
* @author Harsha Wardhana B
* @modules java.management
* @run clean ExecutorShutdownTest
* @run build ExecutorShutdownTest
* @run main ExecutorShutdownTest
*/
import java.util.*;
import java.util.concurrent.*;
import javax.management.*;
import javax.management.remote.*;
/*
When you create a JMXConnector client, you can supply a
"fetch-notifications Executor", which is a
java.util.concurrent.Executor that will be used each time the
connector client wants to call RMIConnection.fetchNotifications.
If such executor is not supplies, the connector client will fallback
on default LinearExecutor. This test checks if user supplied executor
is shutdown abruptly, LinearExecutor is used to handle notifications.
*/
public class ExecutorShutdownTest {
private static final String EXECUTOR_PROPERTY
= "jmx.remote.x.fetch.notifications.executor";
private static final String NOTIF_TYPE = "test.type";
public static void main(String[] args) throws Exception {
// Start JMXConnector Server
JMXServiceURL url = new JMXServiceURL("rmi", null, 0);
MBeanServer mbs = MBeanServerFactory.newMBeanServer();
ObjectName emitName = new ObjectName("blah:type=Emitter");
mbs.registerMBean(new Emitter(), emitName);
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url,
null,
mbs);
cs.start();
// Create executor to provide to JMXConnector client
ExecutorService executor = Executors.newCachedThreadPool();
Map<String, Executor> env = new HashMap<>();
env.put(EXECUTOR_PROPERTY, executor);
JMXServiceURL addr = cs.getAddress();
try (JMXConnector cc = JMXConnectorFactory.connect(addr, env)) {
MBeanServerConnection mbsc = cc.getMBeanServerConnection();
EmitterMBean emitter = (EmitterMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc,
emitName,
EmitterMBean.class,
false);
SemaphoreListener listener = new SemaphoreListener();
NotificationFilterSupport filter = new NotificationFilterSupport();
filter.enableType(NOTIF_TYPE);
mbsc.addNotificationListener(emitName, listener, filter, null);
final int NOTIF_COUNT = 3;
for (int i = 0; i < NOTIF_COUNT; i++) {
emitter.emit();
listener.await();
}
Thread.sleep(1);
listener.checkUnavailable();
System.out.println("Got notifications with client provided executor");
// After shutting down executor, notifications are handled by linear executor
executor.shutdown();
for (int i = 0; i < NOTIF_COUNT; i++) {
emitter.emit();
listener.await();
}
Thread.sleep(1);
listener.checkUnavailable();
System.out.println("Got notifications with linear executor");
}
cs.stop();
System.out.println("TEST PASSED !!!");
}
/* Simple MBean that sends a notification every time we ask it to. */
public static interface EmitterMBean {
public void emit();
}
public static class Emitter
extends NotificationBroadcasterSupport implements EmitterMBean {
public void emit() {
sendNotification(new Notification(NOTIF_TYPE, this, seq++));
}
private long seq = 1;
}
/* Simple NotificationListener that allows you to wait until a
notification has been received. Since it uses a semaphore, you
can wait either before or after the notification has in fact
been received and it will work in either case. */
private static class SemaphoreListener implements NotificationListener {
void await() throws InterruptedException {
semaphore.acquire();
}
/* Ensure no extra notifications were received. If we can acquire
the semaphore, that means its release() method was called more
times than its acquire() method, which means there were too
many notifications. */
void checkUnavailable() throws Exception {
if (semaphore.tryAcquire()) {
throw new Exception("Got extra notifications!");
}
}
public void handleNotification(Notification n, Object h) {
semaphore.release();
}
private final Semaphore semaphore = new Semaphore(0);
}
}

View File

@ -44,7 +44,7 @@ import jdk.testlibrary.Utils;
import jdk.testlibrary.OutputAnalyzer;
import jdk.testlibrary.ProcessTools;
import jdk.test.lib.apps.LingeredApp;
import jdk.testlibrary.Platform;
import jdk.test.lib.Platform;
public class BasicLauncherTest {
@ -230,8 +230,7 @@ public class BasicLauncherTest {
Arrays.asList(toolArgs));
}
public static void main(String[] args)
throws IOException {
public static void main(String[] args) throws Exception {
if (!Platform.shouldSAAttach()) {
// Silently skip the test if we don't have enough permissions to attach

View File

@ -41,7 +41,7 @@ import jdk.testlibrary.JDKToolLauncher;
import jdk.testlibrary.OutputAnalyzer;
import jdk.testlibrary.ProcessTools;
import jdk.test.lib.apps.LingeredApp;
import jdk.testlibrary.Platform;
import jdk.test.lib.Platform;
public class HeapDumpTest {
@ -109,8 +109,7 @@ public class HeapDumpTest {
dump.delete();
}
public static void main(String[] args)
throws IOException {
public static void main(String[] args) throws Exception {
if (!Platform.shouldSAAttach()) {
// Silently skip the test if we don't have enough permissions to attach

View File

@ -30,7 +30,7 @@ import java.util.Map;
import jdk.test.lib.apps.LingeredApp;
import jdk.testlibrary.Utils;
import jdk.testlibrary.Platform;
import jdk.test.lib.Platform;
/*
* @test