--- a/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Thu Jul 23 15:27:58 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, 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
@@ -61,7 +61,6 @@
private static final String LFN_SIG = "L" + LFN + ";";
private static final String LL_SIG = "(L" + OBJ + ";)L" + OBJ + ";";
private static final String LLV_SIG = "(L" + OBJ + ";L" + OBJ + ";)V";
- private static final String CLL_SIG = "(L" + CLS + ";L" + OBJ + ";)L" + OBJ + ";";
/** Name of its super class*/
private static final String superName = OBJ;
@@ -571,7 +570,7 @@
mv.visitLdcInsn(constantPlaceholder(cls));
mv.visitTypeInsn(Opcodes.CHECKCAST, CLS);
mv.visitInsn(Opcodes.SWAP);
- mv.visitMethodInsn(Opcodes.INVOKESTATIC, MHI, "castReference", CLL_SIG, false);
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, CLS, "cast", LL_SIG, false);
if (Object[].class.isAssignableFrom(cls))
mv.visitTypeInsn(Opcodes.CHECKCAST, OBJARY);
else if (PROFILE_LEVEL > 0)
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Thu Jul 23 15:27:58 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, 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
@@ -219,7 +219,7 @@
if (convSpec == null) continue;
MethodHandle fn;
if (convSpec instanceof Class) {
- fn = Lazy.MH_castReference.bindTo(convSpec);
+ fn = Lazy.MH_cast.bindTo(convSpec);
} else {
fn = (MethodHandle) convSpec;
}
@@ -239,7 +239,7 @@
if (convSpec == void.class)
fn = null;
else
- fn = Lazy.MH_castReference.bindTo(convSpec);
+ fn = Lazy.MH_cast.bindTo(convSpec);
} else {
fn = (MethodHandle) convSpec;
}
@@ -302,7 +302,7 @@
Name conv;
if (convSpec instanceof Class) {
Class<?> convClass = (Class<?>) convSpec;
- conv = new Name(Lazy.MH_castReference, convClass, names[INARG_BASE + i]);
+ conv = new Name(Lazy.MH_cast, convClass, names[INARG_BASE + i]);
} else {
MethodHandle fn = (MethodHandle) convSpec;
conv = new Name(fn, names[INARG_BASE + i]);
@@ -326,7 +326,7 @@
conv = new Name(LambdaForm.constantZero(BasicType.basicType(srcType.returnType())));
} else if (convSpec instanceof Class) {
Class<?> convClass = (Class<?>) convSpec;
- conv = new Name(Lazy.MH_castReference, convClass, names[OUT_CALL]);
+ conv = new Name(Lazy.MH_cast, convClass, names[OUT_CALL]);
} else {
MethodHandle fn = (MethodHandle) convSpec;
if (fn.type().parameterCount() == 0)
@@ -343,25 +343,6 @@
return SimpleMethodHandle.make(srcType, form);
}
- /**
- * Identity function, with reference cast.
- * @param t an arbitrary reference type
- * @param x an arbitrary reference value
- * @return the same value x
- */
- @ForceInline
- @SuppressWarnings("unchecked")
- static <T,U> T castReference(Class<? extends T> t, U x) {
- // inlined Class.cast because we can't ForceInline it
- if (x != null && !t.isInstance(x))
- throw newClassCastException(t, x);
- return (T) x;
- }
-
- private static ClassCastException newClassCastException(Class<?> t, Object obj) {
- return new ClassCastException("Cannot cast " + obj.getClass().getName() + " to " + t.getName());
- }
-
static Object[] computeValueConversions(MethodType srcType, MethodType dstType,
boolean strict, boolean monobox) {
final int INARG_COUNT = srcType.parameterCount();
@@ -591,6 +572,7 @@
*/
static class Lazy {
private static final Class<?> MHI = MethodHandleImpl.class;
+ private static final Class<?> CLS = Class.class;
private static final MethodHandle[] ARRAYS;
private static final MethodHandle[] FILL_ARRAYS;
@@ -600,7 +582,7 @@
static final NamedFunction NF_throwException;
static final NamedFunction NF_profileBoolean;
- static final MethodHandle MH_castReference;
+ static final MethodHandle MH_cast;
static final MethodHandle MH_selectAlternative;
static final MethodHandle MH_copyAsPrimitiveArray;
static final MethodHandle MH_fillNewTypedArray;
@@ -623,8 +605,8 @@
NF_throwException.resolve();
NF_profileBoolean.resolve();
- MH_castReference = IMPL_LOOKUP.findStatic(MHI, "castReference",
- MethodType.methodType(Object.class, Class.class, Object.class));
+ MH_cast = IMPL_LOOKUP.findVirtual(CLS, "cast",
+ MethodType.methodType(Object.class, Object.class));
MH_copyAsPrimitiveArray = IMPL_LOOKUP.findStatic(MHI, "copyAsPrimitiveArray",
MethodType.methodType(Object.class, Wrapper.class, Object[].class));
MH_arrayIdentity = IMPL_LOOKUP.findStatic(MHI, "identity",
--- a/jdk/src/java.base/share/classes/java/security/CodeSource.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/CodeSource.java Thu Jul 23 15:27:58 2015 -0700
@@ -339,7 +339,7 @@
* @param strict If true then a strict equality match is performed.
* Otherwise a subset match is performed.
*/
- private boolean matchCerts(CodeSource that, boolean strict)
+ boolean matchCerts(CodeSource that, boolean strict)
{
boolean match;
--- a/jdk/src/java.base/share/classes/java/security/SecureClassLoader.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/SecureClassLoader.java Thu Jul 23 15:27:58 2015 -0700
@@ -25,9 +25,10 @@
package java.security;
-import java.util.Map;
+import java.net.URL;
import java.util.ArrayList;
-import java.net.URL;
+import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
@@ -50,15 +51,15 @@
private final boolean initialized;
/*
- * Map that maps the CodeSource URL (as a String) to ProtectionDomain.
- * We use a String instead of a CodeSource/URL as the key to avoid
+ * Map that maps the CodeSource to a ProtectionDomain. The key is a
+ * CodeSourceKey class that uses a String instead of a URL to avoid
* potential expensive name service lookups. This does mean that URLs that
* are equivalent after nameservice lookup will be placed in separate
* ProtectionDomains; however during policy enforcement these URLs will be
* canonicalized and resolved resulting in a consistent set of granted
* permissions.
*/
- private final Map<String, ProtectionDomain> pdcache
+ private final Map<CodeSourceKey, ProtectionDomain> pdcache
= new ConcurrentHashMap<>(11);
private static final Debug debug = Debug.getInstance("scl");
@@ -209,17 +210,14 @@
return null;
}
- // Use a String form of the URL as the key. It should behave in the
- // same manner as the URL when compared for equality except that no
- // nameservice lookup is done on the hostname (String comparison
+ // Use a CodeSourceKey object key. It should behave in the
+ // same manner as the CodeSource when compared for equality except
+ // that no nameservice lookup is done on the hostname (String comparison
// only), and the fragment is not considered.
- String key = cs.getLocationNoFragString();
- if (key == null) {
- key = "<null>";
- }
+ CodeSourceKey key = new CodeSourceKey(cs);
return pdcache.computeIfAbsent(key, new Function<>() {
@Override
- public ProtectionDomain apply(String key /* not used */) {
+ public ProtectionDomain apply(CodeSourceKey key /* not used */) {
PermissionCollection perms
= SecureClassLoader.this.getPermissions(cs);
ProtectionDomain pd = new ProtectionDomain(
@@ -242,4 +240,37 @@
}
}
+ private static class CodeSourceKey {
+ private final CodeSource cs;
+
+ CodeSourceKey(CodeSource cs) {
+ this.cs = cs;
+ }
+
+ @Override
+ public int hashCode() {
+ String locationNoFrag = cs.getLocationNoFragString();
+ return locationNoFrag != null ? locationNoFrag.hashCode() : 0;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+
+ if (!(obj instanceof CodeSourceKey)) {
+ return false;
+ }
+
+ CodeSourceKey csk = (CodeSourceKey) obj;
+
+ if (!Objects.equals(cs.getLocationNoFragString(),
+ csk.cs.getLocationNoFragString())) {
+ return false;
+ }
+
+ return cs.matchCerts(csk.cs, true);
+ }
+ }
}
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java Thu Jul 23 15:27:58 2015 -0700
@@ -29,6 +29,9 @@
import java.nio.file.attribute.FileTime;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
+import java.time.LocalDateTime;
+import java.time.ZonedDateTime;
+import java.time.ZoneId;
import static java.util.zip.ZipConstants64.*;
@@ -195,6 +198,85 @@
}
/**
+ * Sets the last modification time of the entry in local date-time.
+ *
+ * <p> If the entry is output to a ZIP file or ZIP file formatted
+ * output stream the last modification time set by this method will
+ * be stored into the {@code date and time fields} of the zip file
+ * entry and encoded in standard {@code MS-DOS date and time format}.
+ * If the date-time set is out of the range of the standard {@code
+ * MS-DOS date and time format}, the time will also be stored into
+ * zip file entry's extended timestamp fields in {@code optional
+ * extra data} in UTC time. The {@link java.time.ZoneId#systemDefault()
+ * system default TimeZone} is used to convert the local date-time
+ * to UTC time.
+ *
+ * <p> {@code LocalDateTime} uses a precision of nanoseconds, whereas
+ * this class uses a precision of milliseconds. The conversion will
+ * truncate any excess precision information as though the amount in
+ * nanoseconds was subject to integer division by one million.
+ *
+ * @param time
+ * The last modification time of the entry in local date-time
+ *
+ * @see #getTimeLocal()
+ * @since 1.9
+ */
+ public void setTimeLocal(LocalDateTime time) {
+ int year = time.getYear() - 1980;
+ if (year < 0) {
+ this.xdostime = DOSTIME_BEFORE_1980;
+ } else {
+ this.xdostime = (year << 25 |
+ time.getMonthValue() << 21 |
+ time.getDayOfMonth() << 16 |
+ time.getHour() << 11 |
+ time.getMinute() << 5 |
+ time.getSecond() >> 1)
+ + ((long)(((time.getSecond() & 0x1) * 1000) +
+ time.getNano() / 1000_000) << 32);
+ }
+ if (xdostime != DOSTIME_BEFORE_1980 && year <= 0x7f) {
+ this.mtime = null;
+ } else {
+ this.mtime = FileTime.from(
+ ZonedDateTime.of(time, ZoneId.systemDefault()).toInstant());
+ }
+ }
+
+ /**
+ * Returns the last modification time of the entry in local date-time.
+ *
+ * <p> If the entry is read from a ZIP file or ZIP file formatted
+ * input stream, this is the last modification time from the zip
+ * file entry's {@code optional extra data} if the extended timestamp
+ * fields are present. Otherwise, the last modification time is read
+ * from entry's standard MS-DOS formatted {@code date and time fields}.
+ *
+ * <p> The {@link java.time.ZoneId#systemDefault() system default TimeZone}
+ * is used to convert the UTC time to local date-time.
+ *
+ * @return The last modification time of the entry in local date-time
+ *
+ * @see #setTimeLocal(LocalDateTime)
+ * @since 1.9
+ */
+ public LocalDateTime getTimeLocal() {
+ if (mtime != null) {
+ return LocalDateTime.ofInstant(mtime.toInstant(), ZoneId.systemDefault());
+ }
+ int ms = (int)(xdostime >> 32);
+ return LocalDateTime.of((int)(((xdostime >> 25) & 0x7f) + 1980),
+ (int)((xdostime >> 21) & 0x0f),
+ (int)((xdostime >> 16) & 0x1f),
+ (int)((xdostime >> 11) & 0x1f),
+ (int)((xdostime >> 5) & 0x3f),
+ (int)((xdostime << 1) & 0x3e) + ms / 1000,
+ (ms % 1000) * 1000_000);
+ }
+
+
+ /**
* Sets the last modification time of the entry.
*
* <p> When output to a ZIP file or ZIP file formatted output stream
@@ -498,15 +580,15 @@
// flag its presence or absence. But if mtime is present
// in LOC it must be present in CEN as well.
if ((flag & 0x1) != 0 && (sz0 + 4) <= sz) {
- mtime = unixTimeToFileTime(get32(extra, off + sz0));
+ mtime = unixTimeToFileTime(get32S(extra, off + sz0));
sz0 += 4;
}
if ((flag & 0x2) != 0 && (sz0 + 4) <= sz) {
- atime = unixTimeToFileTime(get32(extra, off + sz0));
+ atime = unixTimeToFileTime(get32S(extra, off + sz0));
sz0 += 4;
}
if ((flag & 0x4) != 0 && (sz0 + 4) <= sz) {
- ctime = unixTimeToFileTime(get32(extra, off + sz0));
+ ctime = unixTimeToFileTime(get32S(extra, off + sz0));
sz0 += 4;
}
break;
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipUtils.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipUtils.java Thu Jul 23 15:27:58 2015 -0700
@@ -99,9 +99,9 @@
if (year < 1980) {
return ZipEntry.DOSTIME_BEFORE_1980;
}
- return (year - 1980) << 25 | (d.getMonth() + 1) << 21 |
- d.getDate() << 16 | d.getHours() << 11 | d.getMinutes() << 5 |
- d.getSeconds() >> 1;
+ return ((year - 1980) << 25 | (d.getMonth() + 1) << 21 |
+ d.getDate() << 16 | d.getHours() << 11 | d.getMinutes() << 5 |
+ d.getSeconds() >> 1) & 0xffffffffL;
}
/**
@@ -144,4 +144,13 @@
public static final long get64(byte b[], int off) {
return get32(b, off) | (get32(b, off+4) << 32);
}
+
+ /**
+ * Fetches signed 32-bit value from byte array at specified offset.
+ * The bytes are assumed to be in Intel (little-endian) byte order.
+ *
+ */
+ public static final int get32S(byte b[], int off) {
+ return (get16(b, off) | (get16(b, off+2) << 16));
+ }
}
--- a/jdk/src/java.base/share/classes/jdk/internal/jimage/ImageNativeSubstrate.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/jdk/internal/jimage/ImageNativeSubstrate.java Thu Jul 23 15:27:58 2015 -0700
@@ -112,7 +112,12 @@
@Override
public byte[] getStringBytes(int offset) {
- return getStringBytes(id, offset);
+ byte[] ret = getStringBytes(id, offset);
+ if (ret == null) {
+ throw new OutOfMemoryError("Error accessing array at offset "
+ + offset);
+ }
+ return ret;
}
@Override
--- a/jdk/src/java.base/share/classes/sun/security/ssl/HandshakeHash.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/HandshakeHash.java Thu Jul 23 15:27:58 2015 -0700
@@ -355,7 +355,7 @@
try {
return cloneDigest(finMD).digest();
} catch (Exception e) {
- throw new Error("BAD");
+ throw new Error("Error during hash calculation", e);
}
}
}
--- a/jdk/src/java.base/share/native/libjava/Image.c Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.base/share/native/libjava/Image.c Thu Jul 23 15:27:58 2015 -0700
@@ -104,6 +104,9 @@
size = strlen(data);
// Allocate byte array.
byteArray = (*env)->NewByteArray(env, (jsize) size);
+ if (byteArray == NULL) {
+ return NULL;
+ }
// Get array base address.
rawBytes = (*env)->GetByteArrayElements(env, byteArray, NULL);
// Copy bytes from image string table.
@@ -122,6 +125,9 @@
jlong* ret;
attributes = (*env)->NewLongArray(env, JVM_ImageGetAttributesCount(env));
+ if (attributes == NULL) {
+ return NULL;
+ }
// Get base address for jlong array.
rawAttributes = (*env)->GetLongArrayElements(env, attributes, NULL);
ret = JVM_ImageGetAttributes(env, rawAttributes, id, offset);
@@ -143,6 +149,9 @@
count = JVM_ImageGetAttributesCount(env);
attributes = (*env)->NewLongArray(env, JVM_ImageGetAttributesCount(env));
+ if (attributes == NULL) {
+ return NULL;
+ }
// Get base address for jlong array.
rawAttributes = (*env)->GetLongArrayElements(env, attributes, NULL);
size = (*env)->GetArrayLength(env, utf8);
@@ -165,6 +174,9 @@
length = JVM_ImageAttributeOffsetsLength(env, id);
offsets = (*env)->NewIntArray(env, length);
+ if (offsets == NULL) {
+ return NULL;
+ }
// Get base address of result.
rawOffsets = (*env)->GetIntArrayElements(env, offsets, NULL);
ret = JVM_ImageAttributeOffsets(env, rawOffsets, length, id);
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbKdcRep.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbKdcRep.java Thu Jul 23 15:27:58 2015 -0700
@@ -75,10 +75,11 @@
}
}
- // XXX Can renew a ticket but not ask for a renewable renewed ticket
- // See impl of Credentials.renew().
- if (req.reqBody.kdcOptions.get(KDCOptions.RENEWABLE) !=
- rep.encKDCRepPart.flags.get(KDCOptions.RENEWABLE)) {
+ // Reply to a renewable request should be renewable, but if request does
+ // not contain renewable, KDC is free to issue a renewable ticket (for
+ // example, if ticket_lifetime is too big).
+ if (req.reqBody.kdcOptions.get(KDCOptions.RENEWABLE) &&
+ !rep.encKDCRepPart.flags.get(KDCOptions.RENEWABLE)) {
throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
}
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ssl/Krb5KeyExchangeService.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ssl/Krb5KeyExchangeService.java Thu Jul 23 15:27:58 2015 -0700
@@ -83,6 +83,12 @@
(PrivilegedExceptionAction<ServiceCreds>)
() -> Krb5Util.getServiceCreds(
GSSCaller.CALLER_SSL_SERVER, null, acc));
+ if (serviceCreds == null) {
+ if (debug != null && Debug.isOn("handshake")) {
+ System.out.println("Kerberos serviceCreds not available");
+ }
+ return null;
+ }
if (debug != null && Debug.isOn("handshake")) {
System.out.println("Using Kerberos creds");
}
--- a/jdk/src/jdk.policytool/share/classes/sun/security/tools/policytool/PolicyTool.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/src/jdk.policytool/share/classes/sun/security/tools/policytool/PolicyTool.java Thu Jul 23 15:27:58 2015 -0700
@@ -633,17 +633,16 @@
type.equals(PolicyParser.PrincipalEntry.REPLACE_NAME)) {
return;
}
- Class<?> PRIN = Class.forName("java.security.Principal");
Class<?> pc = Class.forName(type, true,
Thread.currentThread().getContextClassLoader());
- if (!PRIN.isAssignableFrom(pc)) {
+ if (!Principal.class.isAssignableFrom(pc)) {
MessageFormat form = new MessageFormat(getMessage
("Illegal.Principal.Type.type"));
Object[] source = {type};
throw new InstantiationException(form.format(source));
}
- if (ToolDialog.X500_PRIN_CLASS.equals(pc.getName())) {
+ if (X500Principal.class.getName().equals(pc.getName())) {
// PolicyParser checks validity of X500Principal name
// - PolicyTool needs to as well so that it doesn't store
// an invalid name that can't be read in later
@@ -1563,14 +1562,6 @@
public static final int NEW = 2;
public static final int OPEN = 3;
- public static final String ALL_PERM_CLASS =
- "java.security.AllPermission";
- public static final String FILE_PERM_CLASS =
- "java.io.FilePermission";
-
- public static final String X500_PRIN_CLASS =
- "javax.security.auth.x500.X500Principal";
-
/* popup menus */
public static final String PERM =
PolicyTool.getMessage
@@ -1752,11 +1743,11 @@
for (int i = 0; i < PERM_ARRAY.size(); i++) {
Perm next = PERM_ARRAY.get(i);
if (fullClassName) {
- if (next.FULL_CLASS.equals(clazz)) {
+ if (next.getName().equals(clazz)) {
return next;
}
} else {
- if (next.CLASS.equals(clazz)) {
+ if (next.getSimpleName().equals(clazz)) {
return next;
}
}
@@ -1772,11 +1763,11 @@
for (int i = 0; i < PRIN_ARRAY.size(); i++) {
Prin next = PRIN_ARRAY.get(i);
if (fullClassName) {
- if (next.FULL_CLASS.equals(clazz)) {
+ if (next.getName().equals(clazz)) {
return next;
}
} else {
- if (next.CLASS.equals(clazz)) {
+ if (next.getSimpleName().equals(clazz)) {
return next;
}
}
@@ -2170,7 +2161,7 @@
choice.getAccessibleContext().setAccessibleName(PRIN_TYPE);
for (int i = 0; i < PRIN_ARRAY.size(); i++) {
Prin next = PRIN_ARRAY.get(i);
- choice.addItem(next.CLASS);
+ choice.addItem(next.getSimpleName());
}
if (edit) {
@@ -2180,7 +2171,7 @@
} else {
Prin inputPrin = getPrin(editMe.getPrincipalClass(), true);
if (inputPrin != null) {
- choice.setSelectedItem(inputPrin.CLASS);
+ choice.setSelectedItem(inputPrin.getSimpleName());
}
}
}
@@ -2286,7 +2277,7 @@
choice.getAccessibleContext().setAccessibleName(PERM);
for (int i = 0; i < PERM_ARRAY.size(); i++) {
Perm next = PERM_ARRAY.get(i);
- choice.addItem(next.CLASS);
+ choice.addItem(next.getSimpleName());
}
tw.addNewComponent(newTD, choice, PD_PERM_CHOICE,
0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.BOTH,
@@ -2300,7 +2291,7 @@
if (edit) {
Perm inputPerm = getPerm(editMe.permission, true);
if (inputPerm != null) {
- choice.setSelectedItem(inputPerm.CLASS);
+ choice.setSelectedItem(inputPerm.getSimpleName());
}
}
tw.addNewComponent(newTD, tf, PD_PERM_TEXTFIELD,
@@ -2417,7 +2408,7 @@
"\t'" + pname + "' will be interpreted " +
"as a key store alias.\n" +
"\tThe final principal class will be " +
- ToolDialog.X500_PRIN_CLASS + ".\n" +
+ X500Principal.class.getName() + ".\n" +
"\tThe final principal name will be " +
"determined by the following:\n" +
"\n" +
@@ -2452,7 +2443,7 @@
if (tf.getText().trim().equals("") == false)
name = new String(tf.getText().trim());
if (permission.equals("") ||
- (!permission.equals(ALL_PERM_CLASS) && name == null)) {
+ (!permission.equals(AllPermission.class.getName()) && name == null)) {
throw new InvalidParameterException(PolicyTool.getMessage
("Permission.and.Target.Name.must.have.a.value"));
}
@@ -2467,7 +2458,8 @@
// \\server\share 0, legal
// \\\\server\share 2, illegal
- if (permission.equals(FILE_PERM_CLASS) && name.lastIndexOf("\\\\") > 0) {
+ if (permission.equals(FilePermission.class.getName())
+ && name.lastIndexOf("\\\\") > 0) {
char result = tw.displayYesNoDialog(this,
PolicyTool.getMessage("Warning"),
PolicyTool.getMessage(
@@ -3645,7 +3637,7 @@
if (prinField.getText() != null &&
prinField.getText().length() > 0) {
Prin inputPrin = ToolDialog.getPrin(prinField.getText(), true);
- prin.setSelectedItem(inputPrin.CLASS);
+ prin.setSelectedItem(inputPrin.getSimpleName());
}
return;
}
@@ -3660,7 +3652,7 @@
// set of names and actions
Prin inputPrin = ToolDialog.getPrin((String)e.getItem(), false);
if (inputPrin != null) {
- prinField.setText(inputPrin.FULL_CLASS);
+ prinField.setText(inputPrin.getName());
}
}
}
@@ -3711,7 +3703,7 @@
Perm inputPerm = ToolDialog.getPerm(permField.getText(), true);
if (inputPerm != null) {
- perms.setSelectedItem(inputPerm.CLASS);
+ perms.setSelectedItem(inputPerm.getSimpleName());
}
}
return;
@@ -3732,7 +3724,7 @@
if (inputPerm == null) {
permField.setText("");
} else {
- permField.setText(inputPerm.FULL_CLASS);
+ permField.setText(inputPerm.getName());
}
td.setPermissionNames(inputPerm, names, nameField);
td.setPermissionActions(inputPerm, actions, actionsField);
@@ -4082,26 +4074,30 @@
*/
class Prin {
- public final String CLASS;
- public final String FULL_CLASS;
-
- public Prin(String clazz, String fullClass) {
+ final Class<? extends Principal> CLASS;
+
+ Prin(Class<? extends Principal> clazz) {
this.CLASS = clazz;
- this.FULL_CLASS = fullClass;
+ }
+
+ String getName() {
+ return CLASS.getName();
+ }
+
+ String getSimpleName() {
+ return CLASS.getSimpleName();
}
}
class KrbPrin extends Prin {
- public KrbPrin() {
- super("KerberosPrincipal",
- "javax.security.auth.kerberos.KerberosPrincipal");
+ KrbPrin() {
+ super(javax.security.auth.kerberos.KerberosPrincipal.class);
}
}
class X500Prin extends Prin {
- public X500Prin() {
- super("X500Principal",
- "javax.security.auth.x500.X500Principal");
+ X500Prin() {
+ super(javax.security.auth.x500.X500Principal.class);
}
}
@@ -4110,44 +4106,48 @@
*/
class Perm {
- public final String CLASS;
- public final String FULL_CLASS;
- public final String[] TARGETS;
- public final String[] ACTIONS;
-
- public Perm(String clazz, String fullClass,
+ final Class<? extends Permission> CLASS;
+ final String[] TARGETS;
+ final String[] ACTIONS;
+
+ Perm(Class<? extends Permission> clazz,
String[] targets, String[] actions) {
this.CLASS = clazz;
- this.FULL_CLASS = fullClass;
this.TARGETS = targets;
this.ACTIONS = actions;
}
+
+ String getName() {
+ return CLASS.getName();
+ }
+
+ String getSimpleName() {
+ return CLASS.getSimpleName();
+ }
}
class AllPerm extends Perm {
- public AllPerm() {
- super("AllPermission", "java.security.AllPermission", null, null);
+ AllPerm() {
+ super(java.security.AllPermission.class, null, null);
}
}
class AudioPerm extends Perm {
- public AudioPerm() {
- super("AudioPermission",
- "javax.sound.sampled.AudioPermission",
- new String[] {
+ AudioPerm() {
+ super(javax.sound.sampled.AudioPermission.class,
+ new String[] {
"play",
"record"
},
- null);
+ null);
}
}
class AuthPerm extends Perm {
- public AuthPerm() {
- super("AuthPermission",
- "javax.security.auth.AuthPermission",
- new String[] {
+ AuthPerm() {
+ super(javax.security.auth.AuthPermission.class,
+ new String[] {
"doAs",
"doAsPrivileged",
"getSubject",
@@ -4165,15 +4165,14 @@
PolicyTool.getMessage("configuration.type") + ">",
"refreshLoginConfiguration"
},
- null);
+ null);
}
}
class AWTPerm extends Perm {
- public AWTPerm() {
- super("AWTPermission",
- "java.awt.AWTPermission",
- new String[] {
+ AWTPerm() {
+ super(java.awt.AWTPermission.class,
+ new String[] {
"accessClipboard",
"accessEventQueue",
"accessSystemTray",
@@ -4187,30 +4186,28 @@
"showWindowWithoutWarningBanner",
"toolkitModality",
"watchMousePointer"
- },
- null);
+ },
+ null);
}
}
class DelegationPerm extends Perm {
- public DelegationPerm() {
- super("DelegationPermission",
- "javax.security.auth.kerberos.DelegationPermission",
- new String[] {
+ DelegationPerm() {
+ super(javax.security.auth.kerberos.DelegationPermission.class,
+ new String[] {
// allow user input
},
- null);
+ null);
}
}
class FilePerm extends Perm {
- public FilePerm() {
- super("FilePermission",
- "java.io.FilePermission",
- new String[] {
+ FilePerm() {
+ super(java.io.FilePermission.class,
+ new String[] {
"<<ALL FILES>>"
},
- new String[] {
+ new String[] {
"read",
"write",
"delete",
@@ -4220,64 +4217,59 @@
}
class URLPerm extends Perm {
- public URLPerm() {
- super("URLPermission",
- "java.net.URLPermission",
- new String[] {
- "<"+ PolicyTool.getMessage("url") + ">",
- },
- new String[] {
- "<" + PolicyTool.getMessage("method.list") + ">:<"
- + PolicyTool.getMessage("request.headers.list") + ">",
- });
+ URLPerm() {
+ super(java.net.URLPermission.class,
+ new String[] {
+ "<"+ PolicyTool.getMessage("url") + ">",
+ },
+ new String[] {
+ "<" + PolicyTool.getMessage("method.list") + ">:<"
+ + PolicyTool.getMessage("request.headers.list") + ">",
+ });
}
}
class InqSecContextPerm extends Perm {
- public InqSecContextPerm() {
- super("InquireSecContextPermission",
- "com.sun.security.jgss.InquireSecContextPermission",
- new String[] {
+ InqSecContextPerm() {
+ super(com.sun.security.jgss.InquireSecContextPermission.class,
+ new String[] {
"KRB5_GET_SESSION_KEY",
"KRB5_GET_TKT_FLAGS",
"KRB5_GET_AUTHZ_DATA",
"KRB5_GET_AUTHTIME"
},
- null);
+ null);
}
}
class LogPerm extends Perm {
- public LogPerm() {
- super("LoggingPermission",
- "java.util.logging.LoggingPermission",
- new String[] {
+ LogPerm() {
+ super(java.util.logging.LoggingPermission.class,
+ new String[] {
"control"
},
- null);
+ null);
}
}
class MgmtPerm extends Perm {
- public MgmtPerm() {
- super("ManagementPermission",
- "java.lang.management.ManagementPermission",
- new String[] {
+ MgmtPerm() {
+ super(java.lang.management.ManagementPermission.class,
+ new String[] {
"control",
"monitor"
},
- null);
+ null);
}
}
class MBeanPerm extends Perm {
- public MBeanPerm() {
- super("MBeanPermission",
- "javax.management.MBeanPermission",
- new String[] {
+ MBeanPerm() {
+ super(javax.management.MBeanPermission.class,
+ new String[] {
// allow user input
},
- new String[] {
+ new String[] {
"addNotificationListener",
"getAttribute",
"getClassLoader",
@@ -4300,35 +4292,32 @@
}
class MBeanSvrPerm extends Perm {
- public MBeanSvrPerm() {
- super("MBeanServerPermission",
- "javax.management.MBeanServerPermission",
- new String[] {
+ MBeanSvrPerm() {
+ super(javax.management.MBeanServerPermission.class,
+ new String[] {
"createMBeanServer",
"findMBeanServer",
"newMBeanServer",
"releaseMBeanServer"
},
- null);
+ null);
}
}
class MBeanTrustPerm extends Perm {
- public MBeanTrustPerm() {
- super("MBeanTrustPermission",
- "javax.management.MBeanTrustPermission",
- new String[] {
+ MBeanTrustPerm() {
+ super(javax.management.MBeanTrustPermission.class,
+ new String[] {
"register"
},
- null);
+ null);
}
}
class NetPerm extends Perm {
- public NetPerm() {
- super("NetPermission",
- "java.net.NetPermission",
- new String[] {
+ NetPerm() {
+ super(java.net.NetPermission.class,
+ new String[] {
"allowHttpTrace",
"setDefaultAuthenticator",
"requestPasswordAuthentication",
@@ -4341,43 +4330,40 @@
"setResponseCache",
"getResponseCache"
},
- null);
+ null);
}
}
class NetworkPerm extends Perm {
- public NetworkPerm() {
- super("NetworkPermission",
- "jdk.net.NetworkPermission",
- new String[] {
+ NetworkPerm() {
+ super(jdk.net.NetworkPermission.class,
+ new String[] {
"setOption.SO_FLOW_SLA",
"getOption.SO_FLOW_SLA"
},
- null);
+ null);
}
}
class PrivCredPerm extends Perm {
- public PrivCredPerm() {
- super("PrivateCredentialPermission",
- "javax.security.auth.PrivateCredentialPermission",
- new String[] {
+ PrivCredPerm() {
+ super(javax.security.auth.PrivateCredentialPermission.class,
+ new String[] {
// allow user input
},
- new String[] {
+ new String[] {
"read"
});
}
}
class PropPerm extends Perm {
- public PropPerm() {
- super("PropertyPermission",
- "java.util.PropertyPermission",
- new String[] {
+ PropPerm() {
+ super(java.util.PropertyPermission.class,
+ new String[] {
// allow user input
},
- new String[] {
+ new String[] {
"read",
"write"
});
@@ -4385,21 +4371,19 @@
}
class ReflectPerm extends Perm {
- public ReflectPerm() {
- super("ReflectPermission",
- "java.lang.reflect.ReflectPermission",
- new String[] {
+ ReflectPerm() {
+ super(java.lang.reflect.ReflectPermission.class,
+ new String[] {
"suppressAccessChecks"
},
- null);
+ null);
}
}
class RuntimePerm extends Perm {
- public RuntimePerm() {
- super("RuntimePermission",
- "java.lang.RuntimePermission",
- new String[] {
+ RuntimePerm() {
+ super(java.lang.RuntimePermission.class,
+ new String[] {
"createClassLoader",
"getClassLoader",
"setContextClassLoader",
@@ -4432,15 +4416,14 @@
"usePolicy",
// "inheritedChannel"
},
- null);
+ null);
}
}
class SecurityPerm extends Perm {
- public SecurityPerm() {
- super("SecurityPermission",
- "java.security.SecurityPermission",
- new String[] {
+ SecurityPerm() {
+ super(java.security.SecurityPermission.class,
+ new String[] {
"createAccessControlContext",
"getDomainCombiner",
"getPolicy",
@@ -4470,30 +4453,28 @@
//"getSignerPrivateKey",
//"setSignerKeyPair"
},
- null);
+ null);
}
}
class SerialPerm extends Perm {
- public SerialPerm() {
- super("SerializablePermission",
- "java.io.SerializablePermission",
- new String[] {
+ SerialPerm() {
+ super(java.io.SerializablePermission.class,
+ new String[] {
"enableSubclassImplementation",
"enableSubstitution"
},
- null);
+ null);
}
}
class ServicePerm extends Perm {
- public ServicePerm() {
- super("ServicePermission",
- "javax.security.auth.kerberos.ServicePermission",
- new String[] {
+ ServicePerm() {
+ super(javax.security.auth.kerberos.ServicePermission.class,
+ new String[] {
// allow user input
},
- new String[] {
+ new String[] {
"initiate",
"accept"
});
@@ -4501,13 +4482,12 @@
}
class SocketPerm extends Perm {
- public SocketPerm() {
- super("SocketPermission",
- "java.net.SocketPermission",
- new String[] {
+ SocketPerm() {
+ super(java.net.SocketPermission.class,
+ new String[] {
// allow user input
},
- new String[] {
+ new String[] {
"accept",
"connect",
"listen",
@@ -4517,38 +4497,35 @@
}
class SQLPerm extends Perm {
- public SQLPerm() {
- super("SQLPermission",
- "java.sql.SQLPermission",
- new String[] {
+ SQLPerm() {
+ super(java.sql.SQLPermission.class,
+ new String[] {
"setLog",
"callAbort",
"setSyncFactory",
"setNetworkTimeout",
},
- null);
+ null);
}
}
class SSLPerm extends Perm {
- public SSLPerm() {
- super("SSLPermission",
- "javax.net.ssl.SSLPermission",
- new String[] {
+ SSLPerm() {
+ super(javax.net.ssl.SSLPermission.class,
+ new String[] {
"setHostnameVerifier",
"getSSLSessionContext"
},
- null);
+ null);
}
}
class SubjDelegPerm extends Perm {
- public SubjDelegPerm() {
- super("SubjectDelegationPermission",
- "javax.management.remote.SubjectDelegationPermission",
- new String[] {
+ SubjDelegPerm() {
+ super(javax.management.remote.SubjectDelegationPermission.class,
+ new String[] {
// allow user input
},
- null);
+ null);
}
}
--- a/jdk/test/ProblemList.txt Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/ProblemList.txt Thu Jul 23 15:27:58 2015 -0700
@@ -154,17 +154,6 @@
############################################################################
-# jdk_math
-
-############################################################################
-
-# jdk_other
-
-# 6988950
-demo/jvmti/compiledMethodLoad/CompiledMethodLoadTest.java generic-all
-
-############################################################################
-
# jdk_net
# 7148829
@@ -390,10 +379,4 @@
# 8064572 8060736 8062938
sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all
-# 8079273
-demo/jvmti/hprof/CpuOldTest.java generic-all
-demo/jvmti/hprof/CpuTimesTest.java generic-all
-demo/jvmti/hprof/OptionsTest.java generic-all
-demo/jvmti/hprof/StackMapTableTest.java generic-all
-
############################################################################
--- a/jdk/test/TEST.groups Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/TEST.groups Thu Jul 23 15:27:58 2015 -0700
@@ -42,7 +42,8 @@
:jdk_svc
tier3 = \
- :jdk_rmi
+ :jdk_rmi \
+ :jdk_beans
###############################################################################
#
--- a/jdk/test/demo/jvmti/DemoRun.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/demo/jvmti/DemoRun.java Thu Jul 23 15:27:58 2015 -0700
@@ -122,7 +122,6 @@
String libprefix = os_name.contains("Windows")?"":"lib";
String libsuffix = os_name.contains("Windows")?".dll":
os_name.contains("OS X")?".dylib":".so";
- boolean hprof = demo_name.equals("hprof");
String java = sdk_home
+ File.separator + "bin"
+ File.separator + "java";
@@ -155,22 +154,15 @@
cmdLine += (cmd[i++] = "-Xcheck:jni");
cmdLine += " ";
cmdLine += (cmd[i++] = "-Xverify:all");
- if ( hprof ) {
- /* Load hprof with -agentlib since it's part of jre */
- cmdLine += " ";
- cmdLine += (cmd[i++] = "-agentlib:" + demo_name
- + (demo_options.equals("")?"":("="+demo_options)));
- } else {
- String libname = sdk_home
- + File.separator + "demo"
- + File.separator + "jvmti"
- + File.separator + demo_name
- + File.separator + "lib"
- + File.separator + libprefix + demo_name + libsuffix;
- cmdLine += " ";
- cmdLine += (cmd[i++] = "-agentpath:" + libname
- + (demo_options.equals("")?"":("="+demo_options)));
- }
+ String libname = sdk_home
+ + File.separator + "demo"
+ + File.separator + "jvmti"
+ + File.separator + demo_name
+ + File.separator + "lib"
+ + File.separator + libprefix + demo_name + libsuffix;
+ cmdLine += " ";
+ cmdLine += (cmd[i++] = "-agentpath:" + libname
+ + (demo_options.equals("") ? "" : ("=" + demo_options)));
/* Add any special VM options */
for ( j = 0; j < nvm_options; j++ ) {
cmdLine += " ";
--- a/jdk/test/demo/jvmti/hprof/CpuOldTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5012882 6299047
- * @summary Test jvmti hprof
- *
- * @compile -g HelloWorld.java ../DemoRun.java
- * @build CpuOldTest
- * @run main CpuOldTest HelloWorld
- */
-
-public class CpuOldTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with cpu=old */
- hprof = new DemoRun("hprof", "cpu=old,file=cpuold.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/CpuSamplesTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5012882
- * @summary Test jvmti hprof
- *
- * @compile -g:lines HelloWorld.java ../DemoRun.java
- * @build CpuSamplesTest
- * @run main CpuSamplesTest HelloWorld
- */
-
-public class CpuSamplesTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with cpu=samples */
- hprof = new DemoRun("hprof", "cpu=samples,file=cpusamples.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/CpuTimesDefineClassTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5097131 6299047
- * @summary Test jvmti hprof
- *
- * @compile -g HelloWorld.java DefineClass.java ../DemoRun.java
- * @build CpuTimesDefineClassTest
- * @run main CpuTimesDefineClassTest DefineClass
- *
- *
- */
-
-public class CpuTimesDefineClassTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with cpu=times */
- hprof = new DemoRun("hprof", "cpu=times,file=cputimedefineclass.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/CpuTimesTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5012882 6299047
- * @summary Test jvmti hprof
- *
- * @compile -g HelloWorld.java ../DemoRun.java
- * @build CpuTimesTest
- * @run main CpuTimesTest HelloWorld
- */
-
-public class CpuTimesTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with cpu=times */
- hprof = new DemoRun("hprof", "cpu=times,file=cputimes.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/DefineClass.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-
-/* Testcase that does a defineClass with a NULL name on HelloWorld.class */
-
-import java.io.*;
-
-public class DefineClass extends ClassLoader {
- public static void main(String args[]) {
- DefineClass t = new DefineClass();
- t.run(args);
- }
- public void run(String args[]) {
- Class n;
- byte b[] = new byte[10000];
- int len = 0;
- String cdir;
- String cfile;
-
- /* Class is found here: */
- cdir = System.getProperty("test.classes", ".");
- cfile = cdir + java.io.File.separator + "HelloWorld.class";
-
- try {
- /* Construct byte array with complete class image in it. */
- FileInputStream fis = new FileInputStream(cfile);
- int nbytes;
- do {
- nbytes = fis.read(b, len, b.length-len);
- if ( nbytes > 0 ) {
- len += nbytes;
- }
- } while ( nbytes > 0 );
- } catch ( Throwable x ) {
- System.err.println("Cannot find " + cfile);
- x.printStackTrace();
- }
-
- /* Define the class with null for the name */
- n = defineClass(null, b, 0, len);
-
- /* Try to create an instance of it */
- try {
- n.newInstance();
- } catch ( Throwable x ) {
- x.printStackTrace();
- }
- }
-}
--- a/jdk/test/demo/jvmti/hprof/HeapAllTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5012882 6299047
- * @summary Test jvmti hprof
- *
- * @compile -g HelloWorld.java ../DemoRun.java
- * @build HeapAllTest
- * @run main HeapAllTest HelloWorld
- */
-
-public class HeapAllTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with heap=all */
- hprof = new DemoRun("hprof", "heap=all,file=heapall.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/HeapBinaryFormatTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- * 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 4965057 6313381
- * @summary Test jvmti hprof format=b
- *
- * @compile -g:source HelloWorld.java ../DemoRun.java
- * @build HeapBinaryFormatTest
- * @run main HeapBinaryFormatTest HelloWorld
- */
-
-public class HeapBinaryFormatTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent to get binary format dump */
- hprof = new DemoRun("hprof", "heap=dump,format=b,logflags=4,file=heapbinaryformat.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Try a variation */
- String vm_opts[] = new String[1];
- vm_opts[0] = "-Xmx2100m";
- /* Crashes on small Linux machines: (like fyi)
- How can I tell how much real memory is on a machine?
- hprof.runit(args[0], vm_opts);
- */
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/HeapDumpTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5012882 6299047
- * @summary Test jvmti hprof
- *
- * @compile -g:source HelloWorld.java ../DemoRun.java
- * @build HeapDumpTest
- * @run main HeapDumpTest HelloWorld
- */
-
-public class HeapDumpTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with heap=dump */
- hprof = new DemoRun("hprof", "heap=dump,file=heapdump.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/HeapSitesTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5012882 6299047
- * @summary Test jvmti hprof
- *
- * @compile -g:vars HelloWorld.java ../DemoRun.java
- * @build HeapSitesTest
- * @run main HeapSitesTest HelloWorld
- */
-
-public class HeapSitesTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with heap=sites */
- hprof = new DemoRun("hprof", "heap=sites,file=heapsites.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/HelloWorld.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2004, 2009, 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.
- */
-
-
-/* HelloWorld:
- *
- * Sample target application for HPROF tests
- *
- */
-
-/* Just some classes that create a variety of references */
-
-class AAAA {
- public int AAAA_i;
- public static int AAAA_si;
- public Object AAAA_j;
- public static Object AAAA_sj;
- public long AAAA_k;
- public static long AAAA_sk;
-}
-
-interface IIII {
- Object o = new Object();
-}
-
-class BBBB extends AAAA implements IIII {
- public byte BBBB_ii;
- public static byte BBBB_sii;
- public Object BBBB_jj;
- public static Object BBBB_sjj;
- public short BBBB_kk;
- public static short BBBB_skk;
-}
-
-class REFS {
- private static String s1 = new String("REFS_string1");
- private String is2 = new String("REFS_string2");
- private static String s3 = new String("REFS_string3");
- private static String s4 = new String("REFS_string4");
- private String is5 = new String("REFS_string5");
-
- private AAAA aaaa;
- private BBBB bbbb;
-
- public void test() {
- aaaa = new AAAA();
- bbbb = new BBBB();
-
- aaaa.AAAA_i = 1;
- AAAA.AAAA_si = 2;
- aaaa.AAAA_j = s1;
- AAAA.AAAA_sj = is2;
- aaaa.AAAA_k = 5;
- AAAA.AAAA_sk = 6;
-
- bbbb.BBBB_ii = 11;
- BBBB.BBBB_sii = 22;
- bbbb.BBBB_jj = s3;
- BBBB.BBBB_sjj = s4;
- bbbb.BBBB_kk = 55;
- BBBB.BBBB_skk = 66;
-
- bbbb.AAAA_i = 111;
- bbbb.AAAA_j = is5;
- bbbb.AAAA_k = 555;
- }
-}
-
-/* Fairly simple hello world program that does some exercises first. */
-
-public class HelloWorld {
- public static void main(String args[]) {
-
- /* References exercise. */
- REFS r = new REFS();
- r.test();
-
- /* Use a generic type exercise. */
- java.util.List<String> l = new java.util.ArrayList<String>();
- String.format("%s", "");
-
- /* Create a class that has lots of different bytecodes exercise. */
- /* (Don't run it!) */
- UseAllBytecodes x = new UseAllBytecodes(1,2);
-
- /* Just some code with branches exercise. */
- try {
- if ( args.length == 0 ) {
- System.out.println("No arguments passed in (doesn't matter)");
- } else {
- System.out.println("Arguments passed in (doesn't matter)");
- }
- } catch ( Throwable e ) {
- System.out.println("ERROR: System.out.println() did a throw");
- } finally {
- System.out.println("Hello, world!");
- }
- }
-}
--- a/jdk/test/demo/jvmti/hprof/MonitorTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5012882
- * @summary Test jvmti hprof
- *
- * @compile -g ../Context.java ../DemoRun.java
- * @build MonitorTest
- * @run main MonitorTest Context 25 200 1000
- */
-
-/* To create monitor contention, increase the default configuration.
- * Hprof seems to have historically not output anything unless certain
- * limits have been reached on the total contention time.
- */
-
-public class MonitorTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
-
- /* Run JVMTI hprof agent with monitor=y */
- hprof = new DemoRun("hprof", "monitor=y,file=monitor.txt");
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed - ERROR seen in output");
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/OptionsTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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 5083441 6299047
- * @summary Test jvmti hprof
- *
- * @compile -g:lines HelloWorld.java ../DemoRun.java
- * @build OptionsTest
- * @run main OptionsTest HelloWorld
- */
-
-import java.util.*;
-
-public class OptionsTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
- List<String> options = new LinkedList<String>();
-
- options.add("cpu=samples,depth=0,file=options0.txt");
- options.add("cpu=times,depth=0,file=options1.txt");
- options.add("cpu=old,depth=0,file=options2.txt");
- options.add("depth=0,file=options3.txt");
-
- for(String option: options) {
- /* Run JVMTI hprof agent with various options */
- hprof = new DemoRun("hprof", option);
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed with " + option
- + " - ERROR seen in output");
- }
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/StackMapTableTest.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- * 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 6266289 6299047 6855180 6855551
- * @summary Test jvmti hprof and java_crw_demo with StackMapTable attributes
- *
- * @compile ../DemoRun.java
- * @compile -g:lines HelloWorld.java
- * @build StackMapTableTest
- * @run main StackMapTableTest HelloWorld
- */
-
-import java.util.*;
-
-public class StackMapTableTest {
-
- public static void main(String args[]) throws Exception {
- DemoRun hprof;
- List<String> options = new LinkedList<String>();
-
- options.add("cpu=samples,file=stackmaptable0.txt");
- options.add("cpu=times,file=stackmaptable1.txt");
- options.add("heap=sites,file=stackmaptable2.txt");
- options.add("file=stackmaptable3.txt");
-
- for(String option: options) {
- /* Run JVMTI hprof agent with various options */
- hprof = new DemoRun("hprof", option);
- hprof.runit(args[0]);
-
- /* Make sure patterns in output look ok */
- if (hprof.output_contains("ERROR")) {
- throw new RuntimeException("Test failed with " + option
- + " - ERROR seen in output");
- }
- }
-
- /* Must be a pass. */
- System.out.println("Test passed - cleanly terminated");
- }
-}
--- a/jdk/test/demo/jvmti/hprof/UseAllBytecodes.java Thu Jul 23 11:54:29 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-/*
- A simple Java class definition that helps self-test the runtime
- interpreter. Used for getfield/putfield, invoke* opcodes and
- their _quick variants.
-
- See src/share/java/runtime/selftest.c for details of the test
- environment.
-*/
-
-/* Used to be sun/misc/SelfTest.java */
-
-interface UseAllBytecodesInterface
-{
- public void test_an_interface(int p1);
-}
-
-public class UseAllBytecodes implements UseAllBytecodesInterface
-{
- public int i1, i2;
- public float f1, f2;
- public double d1, d2;
- public long l1, l2;
-
- public static int si1, si2;
- public static float sf1, sf2;
- public static double sd1, sd2;
- public static long sl1, sl2;
-
- public UseAllBytecodesInterface interfaceObject;
-
- public int multi[][][];
-
- public UseAllBytecodes()
- {
- /* This constructor is not intended to ever be run. It is here
- to force CONSTANT_Methodref constants into the CP */
- set_i1(11);
- set_i2(22);
- set_f1(1.1f);
- set_f2(2.2f);
- set_d1(1.0);
- set_d2(2.0);
- set_l1(3);
- set_l2(4);
-
- set_si1(33);
- set_si2(44);
- set_sf1(3.3f);
- set_sf2(4.4f);
- set_sd1(3.0);
- set_sd2(4.0);
- set_sl1(5);
- set_sl2(6);
-
- test_areturn();
- test_athrow1();
- test_athrow2();
- test_athrow3();
- test_athrow4();
-
- /* This puts a CONSTANT_InterfaceMethodref into the CP */
- interfaceObject.test_an_interface(1234);
-
- /* This creates an array and puts it into the CP */
- multi = new int[2][3][4];
- }
-
- public UseAllBytecodes(int p1)
- {
- i1 = p1;
- i2 = 12345678; /* This puts a CONSTANT_Integer into the CP */
- d1 = (double) p1;
- d2 = 1.2e234; /* This puts a CONSTANT_Double into the CP */
- }
-
- public UseAllBytecodes(int p1, int p2)
- {
- i1 = p1;
- i2 = p2;
- }
-
- /* These methods should return something other than their
- arguments, so the self test can easily determine that
- the correct value was returned. */
- public int set_i1(int p1)
- {
- i1 = p1;
- return i1 + 1;
- }
-
- public int set_i2(int p2)
- {
- i2 = p2;
- return i2 + 1;
- }
-
- public float set_f1(float p1)
- {
- f1 = p1;
- return f1 + 1.0e34f;
- }
-
- public float set_f2(float p2)
- {
- f2 = p2;
- return f2 + 1.0e34f;
- }
-
- public double set_d1(double p1)
- {
- d1 = p1;
- return d1 + 1.0e234;
- }
-
- public double set_d2(double p2)
- {
- d2 = p2;
- return d2 + 1.0e234;
- }
-
- public long set_l1(long p1)
- {
- l1 = p1;
- return l1 + 1;
- }
-
- public long set_l2(long p2)
- {
- l2 = p2;
- return l2 + 1;
- }
-
- public static void set_si1(int p1)
- {
- si1 = p1;
- }
-
- public static void set_si2(int p2)
- {
- si2 = p2;
- }
-
- public static void set_sf1(float p1)
- {
- sf1 = p1;
- }
-
- public static void set_sf2(float p2)
- {
- sf2 = p2;
- }
-
- public static void set_sd1(double p1)
- {
- sd1 = p1;
- }
-
- public static void set_sd2(double p2)
- {
- sd2 = p2;
- }
-
- public static void set_sl1(long p1)
- {
- sl1 = p1;
- }
-
- public static void set_sl2(long p2)
- {
- sl2 = p2;
- }
-
- public UseAllBytecodes test_areturn()
- {
- return this;
- }
-
- /* This method does the same thing as set_i1.
- It is here to test the invokeinterface opcode. */
- public void test_an_interface(int p1)
- {
- i1 = p1;
- }
-
- /* The following 10 methods test various permutations of
- try-and-catch. */
- public static void test_athrow1() throws NullPointerException
- {
- try
- {
- si1 = -1;
- throw new NullPointerException();
- }
- catch (Exception e)
- {
- si1 = 1;
- }
- }
-
- public static void test_athrow2()
- {
- int i = 1;
- try
- {
- si1 = -1;
- test_athrow1();
- }
- catch (Exception e)
- {
- // This should *not* catch the exception;
- // should be caught in test_athrow1.
- si1 = i + 1;
- }
- }
-
- public static void test_athrow3()
- {
- int i = 1;
- try
- {
- // Ultimately throws NullPointerException
- si1 = -1;
- si2 = -1;
- test_athrow5();
- }
- catch (NullPointerException np)
- {
- si1 = i + 1;
- }
- catch (NoSuchMethodException e)
- {
- si2 = i + 1;
- }
- si1++; // total is 3
- }
-
- public static void test_athrow4()
- {
- int i = 2;
- try
- {
- // Ultimately throws NoSuchMethodException
- si1 = -1;
- si2 = -1;
- test_athrow7();
- }
- catch (NullPointerException e)
- {
- si1 = i + 1;
- }
- catch (NoSuchMethodException nsm)
- {
- si2 = i + 1;
- }
- si2++; // total is 4
- }
-
- public static void test_throw_nosuchmethod() throws NoSuchMethodException
- {
- throw new NoSuchMethodException();
- }
-
- public static void test_throw_nullpointer() throws NullPointerException
- {
- throw new NullPointerException();
- }
-
- public static void test_athrow5() throws NullPointerException, NoSuchMethodException
- {
- test_athrow6();
- }
-
- public static void test_athrow6() throws NullPointerException, NoSuchMethodException
- {
- test_throw_nullpointer();
- }
-
- public static void test_athrow7() throws NullPointerException, NoSuchMethodException
- {
- test_athrow8();
- }
-
- public static void test_athrow8() throws NullPointerException, NoSuchMethodException
- {
- test_throw_nosuchmethod();
- }
-}
--- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Thu Jul 23 15:27:58 2015 -0700
@@ -168,6 +168,11 @@
try {
returned = target.invokeWithArguments(args);
} catch (Throwable ex) {
+ if (CodeCacheOverflowProcessor.isThrowableCausedByVME(ex)) {
+ // This error will be treated by CodeCacheOverflowProcessor
+ // to prevent the test from failing because of code cache overflow.
+ throw new Error(ex);
+ }
testCase.assertCatch(ex);
returned = ex;
}
--- a/jdk/test/java/nio/channels/ServerSocketChannel/AdaptServerSocket.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/java/nio/channels/ServerSocketChannel/AdaptServerSocket.java Thu Jul 23 15:27:58 2015 -0700
@@ -123,7 +123,7 @@
public static void main(String[] args) throws Exception {
test(0, 0, false);
- test(50, 500, false);
+ test(50, 5000, false);
test(500, 50, true);
}
--- a/jdk/test/java/security/SecureClassLoader/DefineClass.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/java/security/SecureClassLoader/DefineClass.java Thu Jul 23 15:27:58 2015 -0700
@@ -21,28 +21,44 @@
* questions.
*/
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.InputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.net.URL;
import java.security.CodeSource;
+import java.security.Key;
+import java.security.KeyStoreException;
+import java.security.KeyStoreSpi;
+import java.security.NoSuchAlgorithmException;
import java.security.Permission;
import java.security.Policy;
import java.security.ProtectionDomain;
+import java.security.Provider;
import java.security.SecureClassLoader;
+import java.security.Security;
+import java.security.UnrecoverableKeyException;
+import java.security.URIParameter;
import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
+import java.util.Date;
+import java.util.Enumeration;
import java.util.List;
import java.util.PropertyPermission;
/*
* @test
- * @bug 6826789
+ * @bug 6826789 8131486
* @summary Make sure equivalent ProtectionDomains are granted the same
* permissions when the CodeSource URLs are different but resolve
* to the same ip address after name service resolution.
- * @run main/othervm/java.security.policy=DefineClass.policy DefineClass
+ * @run main/othervm DefineClass
*/
public class DefineClass {
@@ -53,42 +69,100 @@
new PropertyPermission("user.name", "read")
};
- // Base64 encoded bytes of a simple class: "public class Foo {}"
+ // Base64 encoded bytes of simple class: "package foo; public class Foo {}"
private final static String FOO_CLASS =
+ "yv66vgAAADMADQoAAwAKBwALBwAMAQAGPGluaXQ+AQADKClWAQAEQ29kZQEA" +
+ "D0xpbmVOdW1iZXJUYWJsZQEAClNvdXJjZUZpbGUBAAhGb28uamF2YQwABAAF" +
+ "AQAHZm9vL0ZvbwEAEGphdmEvbGFuZy9PYmplY3QAIQACAAMAAAAAAAEAAQAE" +
+ "AAUAAQAGAAAAHQABAAEAAAAFKrcAAbEAAAABAAcAAAAGAAEAAAABAAEACAAA" +
+ "AAIACQ==";
+
+ // Base64 encoded bytes of simple class: "package bar; public class Bar {}"
+ private final static String BAR_CLASS =
+ "yv66vgAAADMADQoAAwAKBwALBwAMAQAGPGluaXQ+AQADKClWAQAEQ29kZQEA" +
+ "D0xpbmVOdW1iZXJUYWJsZQEAClNvdXJjZUZpbGUBAAhCYXIuamF2YQwABAAF" +
+ "AQAHYmFyL0JhcgEAEGphdmEvbGFuZy9PYmplY3QAIQACAAMAAAAAAAEAAQAE" +
+ "AAUAAQAGAAAAHQABAAEAAAAFKrcAAbEAAAABAAcAAAAGAAEAAAABAAEACAAA" +
+ "AAIACQ==";
+
+ // Base64 encoded bytes of simple class: "package baz; public class Baz {}"
+ private final static String BAZ_CLASS =
"yv66vgAAADQADQoAAwAKBwALBwAMAQAGPGluaXQ+AQADKClWAQAEQ29kZQEA" +
- "D0xpbmVOdW1iZXJUYWJsZQEAClNvdXJjZUZpbGUBAAhGb28uamF2YQwABAAF" +
- "AQADRm9vAQAQamF2YS9sYW5nL09iamVjdAAhAAIAAwAAAAAAAQABAAQABQAB" +
- "AAYAAAAdAAEAAQAAAAUqtwABsQAAAAEABwAAAAYAAQAAAAEAAQAIAAAAAgAJ";
+ "D0xpbmVOdW1iZXJUYWJsZQEAClNvdXJjZUZpbGUBAAhCYXouamF2YQwABAAF" +
+ "AQAHYmF6L0JhegEAEGphdmEvbGFuZy9PYmplY3QAIQACAAMAAAAAAAEAAQAE" +
+ "AAUAAQAGAAAAHQABAAEAAAAFKrcAAbEAAAABAAcAAAAGAAEAAAABAAEACAAA" +
+ "AAIACQ==";
- // Base64 encoded bytes of a simple class: "public class Bar {}"
- private final static String BAR_CLASS =
- "yv66vgAAADQADQoAAwAKBwALBwAMAQAGPGluaXQ+AQADKClWAQAEQ29kZQEA" +
- "D0xpbmVOdW1iZXJUYWJsZQEAClNvdXJjZUZpbGUBAAhCYXIuamF2YQwABAAF" +
- "AQADQmFyAQAQamF2YS9sYW5nL09iamVjdAAhAAIAAwAAAAAAAQABAAQABQAB" +
- "AAYAAAAdAAEAAQAAAAUqtwABsQAAAAEABwAAAAYAAQAAAAEAAQAIAAAAAgAJ";
+ private final static String BAZ_CERT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIEFzCCA8OgAwIBAgIESpPf8TANBglghkgBZQMEAwIFADAOMQwwCgYDVQQDEwNG\n" +
+ "b28wHhcNMTUwNzE1MTY1ODM5WhcNMTUxMDEzMTY1ODM5WjAOMQwwCgYDVQQDEwNG\n" +
+ "b28wggNCMIICNQYHKoZIzjgEATCCAigCggEBAI95Ndm5qum/q+2Ies9JUbbzLsWe\n" +
+ "O683GOjqxJYfPv02BudDUanEGDM5uAnnwq4cU5unR1uF0BGtuLR5h3VJhGlcrA6P\n" +
+ "FLM2CCiiL/onEQo9YqmTRTQJoP5pbEZY+EvdIIGcNwmgEFexla3NACM9ulSEtikf\n" +
+ "nWSO+INEhneXnOwEtDSmrC516Zhd4j2wKS/BEYyf+p2BgeczjbeStzDXueNJWS9o\n" +
+ "CZhyFTkV6j1ri0ZTxjNFj4A7MqTC4PJykCVuTj+KOwg4ocRQ5OGMGimjfd9eoUPe\n" +
+ "S2b/BJA+1c8WI+FY1IfGCOl/IRzYHcojy244B2X4IuNCvkhMBXY5OWAc1mcCHQC6\n" +
+ "9pamhXj3397n+mfJd8eF7zKyM7rlgMC81WldAoIBABamXFggSFBwTnUCo5dXBA00\n" +
+ "2jo0eMFU1OSlwC0kLuBPluYeS9CQSr2sjzfuseCfMYLSPJBDy2QviABBYO35ygmz\n" +
+ "IHannDKmJ/JHPpGHm6LE50S9IIFUTLVbgCw2jR+oPtSJ6U4PoGiOMkKKXHjEeMaN\n" +
+ "BSe3HJo6uwsL4SxEaJY559POdNsQGmWqK4f2TGgm2z7HL0tVmYNLtO2wL3yQ6aSW\n" +
+ "06VdU1vr/EXU9hn2Pz3tu4c5JcLyJOB3MSltqIfsHkdI+H77X963VIQxayIy3uVT\n" +
+ "3a8CESsNHwLaMJcyJP4nrtqLnUspItm6i+Oe2eEDpjxSgQvGiLfi7UMW4e8X294D\n" +
+ "ggEFAAKCAQBsGeU8/STExzQsJ8kFM9xarA/2VAFMzyUpd3IQ2UGHQC5rEnGh/RiU\n" +
+ "T20y7a2hCpQ1f/qgLnY8hku9GRVY3z8WamBzWLzCAEAx67EsS58mf4o8R3sUbkH5\n" +
+ "/mRaZoNVSPUy+tXoLmTzIetU4W+JT8Rq4OcXXU9uo9TreeBehhVexS3vpVgQeUIn\n" +
+ "MmMma8WHpovIJQQlp4cyjalX7Beda/tqX/HPLkAS4TRqQAz7hFr3FqFrVMKFSGo4\n" +
+ "fTS06GGdQ4tw9c6NQLuQ9WF9BxYSwSk9yENQvKDZaBNarqPMnsh1Gi/QcKMRBVhM\n" +
+ "RT/9vb4QUi/pOowhhKCDBLgjY60QgX3HoyEwHzAdBgNVHQ4EFgQUa787CE+3ZNAb\n" +
+ "g1ql9yJVVrRCdx0wDQYJYIZIAWUDBAMCBQADPwAwPAIcCUkZIRrBlKdTzhKYBEOm\n" +
+ "E1i45MMum1RuHc28agIcfHQkkjBA4FfH5UMRgKpIyRR8V/dVboxDj4hKOA==\n" +
+ "-----END CERTIFICATE-----";
public static void main(String[] args) throws Exception {
+ Security.addProvider(new TestProvider());
+
MySecureClassLoader scl = new MySecureClassLoader();
- Policy p = Policy.getPolicy();
+
+ File policyFile = new File(System.getProperty("test.src", "."),
+ "DefineClass.policy");
+ Policy p = Policy.getInstance("JavaPolicy",
+ new URIParameter(policyFile.toURI()));
+ Policy.setPolicy(p);
+
+ System.setSecurityManager(new SecurityManager());
ArrayList<Permission> perms1 = getPermissions(scl, p,
"http://localhost/",
- "Foo", FOO_CLASS);
+ "foo.Foo", FOO_CLASS,
+ null);
checkPerms(perms1, GRANTED_PERMS);
ArrayList<Permission> perms2 = getPermissions(scl, p,
"http://127.0.0.1/",
- "Bar", BAR_CLASS);
+ "bar.Bar", BAR_CLASS,
+ null);
checkPerms(perms2, GRANTED_PERMS);
assert(perms1.equals(perms2));
+
+ // check that class signed by baz is granted an additional permission
+ Certificate[] chain = new Certificate[] {getCert(BAZ_CERT)};
+ ArrayList<Permission> perms3 = getPermissions(scl, p,
+ "http://localhost/",
+ "baz.Baz", BAZ_CLASS,
+ chain);
+ List<Permission> perms = new ArrayList<>(Arrays.asList(GRANTED_PERMS));
+ perms.add(new PropertyPermission("user.dir", "read"));
+ checkPerms(perms3, perms.toArray(new Permission[0]));
}
// returns the permissions granted to the codebase URL
private static ArrayList<Permission> getPermissions(MySecureClassLoader scl,
Policy p, String url,
String className,
- String classBytes)
+ String classBytes,
+ Certificate[] chain)
throws IOException {
- CodeSource cs = new CodeSource(new URL(url), (Certificate[])null);
+ CodeSource cs = new CodeSource(new URL(url), chain);
Base64.Decoder bd = Base64.getDecoder();
byte[] bytes = bd.decode(classBytes);
Class<?> c = scl.defineMyClass(className, bytes, cs);
@@ -105,10 +179,125 @@
}
}
+ private static Certificate getCert(String base64Cert) throws Exception {
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ InputStream is = new ByteArrayInputStream(base64Cert.getBytes("UTF-8"));
+ return cf.generateCertificate(is);
+ }
+
// A SecureClassLoader that allows the test to define its own classes
private static class MySecureClassLoader extends SecureClassLoader {
Class<?> defineMyClass(String name, byte[] b, CodeSource cs) {
return super.defineClass(name, b, 0, b.length, cs);
}
}
+
+ private static class TestProvider extends Provider {
+ TestProvider() {
+ super("Test8131486", 0.0, "For testing only");
+ putService(new Provider.Service(this, "KeyStore", "Test8131486",
+ "DefineClass$TestKeyStore", null, null));
+ }
+ }
+
+ /**
+ * A KeyStore containing a single certificate entry named "baz".
+ */
+ public static class TestKeyStore extends KeyStoreSpi {
+ private final String baz = "baz";
+ private final List<String> aliases = Collections.singletonList(baz);
+ private final Certificate bazCert;
+
+ public TestKeyStore() {
+ try {
+ this.bazCert = getCert(BAZ_CERT);
+ } catch (Exception e) {
+ throw new Error();
+ }
+ }
+
+ @Override
+ public Enumeration<String> engineAliases() {
+ return Collections.enumeration(aliases);
+ }
+
+ @Override
+ public boolean engineContainsAlias(String alias) {
+ return alias.equals(baz);
+ }
+
+ @Override
+ public void engineDeleteEntry(String alias) throws KeyStoreException {
+ throw new KeyStoreException();
+ }
+
+ @Override
+ public Certificate engineGetCertificate(String alias) {
+ return alias.equals(baz) ? bazCert : null;
+ }
+
+ @Override
+ public String engineGetCertificateAlias(Certificate cert) {
+ return cert.equals(bazCert) ? baz : null;
+ }
+
+ @Override
+ public Certificate[] engineGetCertificateChain(String alias) {
+ return alias.equals(baz) ? new Certificate[] {bazCert} : null;
+ }
+
+ @Override
+ public Date engineGetCreationDate(String alias) {
+ return alias.equals(baz) ? new Date() : null;
+ }
+
+ @Override
+ public Key engineGetKey(String alias, char[] password)
+ throws NoSuchAlgorithmException, UnrecoverableKeyException {
+ return null;
+ }
+
+ @Override
+ public boolean engineIsCertificateEntry(String alias) {
+ return alias.equals(baz);
+ }
+
+ @Override
+ public boolean engineIsKeyEntry(String alias) {
+ return false;
+ }
+
+ @Override
+ public void engineLoad(InputStream stream, char[] password)
+ throws IOException, NoSuchAlgorithmException, CertificateException {
+ }
+
+ @Override
+ public void engineSetCertificateEntry(String alias, Certificate cert)
+ throws KeyStoreException {
+ throw new KeyStoreException();
+ }
+
+ @Override
+ public void engineSetKeyEntry(String alias, byte[] key,
+ Certificate[] chain)
+ throws KeyStoreException {
+ throw new KeyStoreException();
+ }
+
+ @Override
+ public void engineSetKeyEntry(String alias, Key key, char[] password,
+ Certificate[] chain)
+ throws KeyStoreException {
+ throw new KeyStoreException();
+ }
+
+ @Override
+ public int engineSize() { return 1; }
+
+ @Override
+ public void engineStore(OutputStream stream, char[] password)
+ throws IOException, NoSuchAlgorithmException, CertificateException {
+ }
+ }
}
--- a/jdk/test/java/security/SecureClassLoader/DefineClass.policy Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/java/security/SecureClassLoader/DefineClass.policy Thu Jul 23 15:27:58 2015 -0700
@@ -1,7 +1,7 @@
+keystore "NONE", "Test8131486", "Test8131486";
+
grant {
- permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getProtectionDomain";
- permission java.security.SecurityPermission "getPolicy";
};
grant codebase "http://localhost/" {
permission java.util.PropertyPermission "user.home", "read";
@@ -9,3 +9,6 @@
grant codebase "http://127.0.0.1/" {
permission java.util.PropertyPermission "user.name", "read";
};
+grant codebase "http://localhost/", signedby "baz" {
+ permission java.util.PropertyPermission "user.dir", "read";
+};
--- a/jdk/test/java/util/concurrent/ConcurrentHashMap/ConcurrentAssociateTest.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/java/util/concurrent/ConcurrentHashMap/ConcurrentAssociateTest.java Thu Jul 23 15:27:58 2015 -0700
@@ -120,7 +120,8 @@
}
};
- int ps = Runtime.getRuntime().availableProcessors();
+ // Bound concurrency to avoid degenerate performance
+ int ps = Math.min(Runtime.getRuntime().availableProcessors(), 32);
Stream<CompletableFuture> runners = IntStream.range(0, ps)
.mapToObj(i -> sr.get())
.map(CompletableFuture::runAsync);
--- a/jdk/test/java/util/zip/TestExtraTime.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/java/util/zip/TestExtraTime.java Thu Jul 23 15:27:58 2015 -0700
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 4759491 6303183 7012868 8015666 8023713 8068790 8076641
+ * @bug 4759491 6303183 7012868 8015666 8023713 8068790 8076641 8075526 8130914
* @summary Test ZOS and ZIS timestamp in extra field correctly
*/
@@ -54,8 +54,12 @@
for (byte[] extra : new byte[][] { null, new byte[] {1, 2, 3}}) {
test(mtime, null, null, null, extra);
+
// ms-dos 1980 epoch problem
test(FileTime.from(10, TimeUnit.MILLISECONDS), null, null, null, extra);
+ // negative epoch time
+ test(FileTime.from(-100, TimeUnit.DAYS), null, null, null, extra);
+
// non-default tz
test(mtime, null, null, tz, extra);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/zip/TestLocalTime.java Thu Jul 23 15:27:58 2015 -0700
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2015, 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 8075526
+ * @summary Test timestamp via ZipEntry.get/setTimeLocal()
+ */
+
+import java.io.*;
+import java.nio.file.*;
+import java.time.*;
+import java.util.*;
+import java.util.zip.*;
+
+public class TestLocalTime {
+ private static TimeZone tz0 = TimeZone.getDefault();
+
+ public static void main(String[] args) throws Throwable{
+ try {
+ LocalDateTime ldt = LocalDateTime.now();
+ test(getBytes(ldt), ldt); // now
+ ldt = ldt.withYear(1968); test(getBytes(ldt), ldt);
+ ldt = ldt.withYear(1970); test(getBytes(ldt), ldt);
+ ldt = ldt.withYear(1982); test(getBytes(ldt), ldt);
+ ldt = ldt.withYear(2037); test(getBytes(ldt), ldt);
+ ldt = ldt.withYear(2100); test(getBytes(ldt), ldt);
+ ldt = ldt.withYear(2106); test(getBytes(ldt), ldt);
+
+ TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
+ // dos time does not support < 1980, have to use
+ // utc in mtime.
+ testWithTZ(tz, ldt.withYear(1982));
+ testWithTZ(tz, ldt.withYear(2037));
+ testWithTZ(tz, ldt.withYear(2100));
+ testWithTZ(tz, ldt.withYear(2106));
+ } finally {
+ TimeZone.setDefault(tz0);
+ }
+ }
+
+ static byte[] getBytes(LocalDateTime mtime) throws Throwable {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ZipOutputStream zos = new ZipOutputStream(baos);
+ ZipEntry ze = new ZipEntry("TestLocalTime.java");
+ ze.setTimeLocal(mtime);
+ check(ze, mtime);
+
+ zos.putNextEntry(ze);
+ zos.write(new byte[] { 1, 2, 3, 4});
+ zos.close();
+ return baos.toByteArray();
+ }
+
+ static void testWithTZ(TimeZone tz, LocalDateTime ldt) throws Throwable {
+ TimeZone.setDefault(tz);
+ byte[] zbytes = getBytes(ldt);
+ TimeZone.setDefault(tz0);
+ test(zbytes, ldt);
+ }
+
+ static void test(byte[] zbytes, LocalDateTime expected) throws Throwable {
+ System.out.printf("--------------------%nTesting: [%s]%n", expected);
+ // ZipInputStream
+ ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(zbytes));
+ ZipEntry ze = zis.getNextEntry();
+ zis.close();
+ check(ze, expected);
+
+ // ZipFile
+ Path zpath = Paths.get(System.getProperty("test.dir", "."),
+ "TestLocalTime.zip");
+ try {
+ Files.copy(new ByteArrayInputStream(zbytes), zpath);
+ ZipFile zf = new ZipFile(zpath.toFile());
+ ze = zf.getEntry("TestLocalTime.java");
+ check(ze, expected);
+ zf.close();
+ } finally {
+ Files.deleteIfExists(zpath);
+ }
+ }
+
+ static void check(ZipEntry ze, LocalDateTime expected) {
+ LocalDateTime ldt = ze.getTimeLocal();
+ if (ldt.atOffset(ZoneOffset.UTC).toEpochSecond() >> 1
+ != expected.atOffset(ZoneOffset.UTC).toEpochSecond() >> 1) {
+ throw new RuntimeException("Timestamp: storing mtime failed!");
+ }
+ }
+}
--- a/jdk/test/javax/net/ssl/TLS/TestJSSE.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSE.java Thu Jul 23 15:27:58 2015 -0700
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015, 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
@@ -72,7 +72,6 @@
* -DCLIENT_PROTOCOL=DEFAULT -Djdk.tls.client.protocols=TLSv1.2
* -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
* TestJSSE javax.net.ssl.SSLHandshakeException
- * @key intermittent
*
*/
--- a/jdk/test/sun/management/HotspotRuntimeMBean/GetTotalSafepointTime.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/sun/management/HotspotRuntimeMBean/GetTotalSafepointTime.java Thu Jul 23 15:27:58 2015 -0700
@@ -26,7 +26,7 @@
* @bug 4858522
* @modules java.management/sun.management
* @summary Basic unit test of HotspotRuntimeMBean.getTotalSafepointTime()
- * @author Steve Bohne
+ * @run main/othervm -XX:+UsePerfData GetTotalSafepointTime
*/
/*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/auto/BogusKDC.java Thu Jul 23 15:27:58 2015 -0700
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2015, 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.
+ */
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+/*
+ * @test
+ * @bug 4515853 8075297
+ * @summary Checks that Kerberos client tries slave KDC
+ * if master KDC is not responding
+ * @run main/othervm BogusKDC
+ */
+public class BogusKDC {
+
+ static final String TEST_SRC = System.getProperty("test.src", ".");
+ static final String HOST = "localhost";
+ static final String NOT_EXISTING_HOST = "not.existing.host";
+ static final String REALM = "TEST.REALM";
+ static final String USER = "USER";
+ static final String USER_PRINCIPAL = USER + "@" + REALM;
+ static final String USER_PASSWORD = "password";
+ static final String KRBTGT_PRINCIPAL = "krbtgt/" + REALM;
+ static final String KRB5_CONF = "krb5.conf";
+ static final int WRONG_KDC_PORT = 21;
+
+ static final String KRB5_CONF_TEMPLATE = ""
+ + "[libdefaults]\n"
+ + "default_realm = TEST.REALM\n"
+ + "max_retries = 1\n"
+ + "\n"
+ + "[realms]\n"
+ + "TEST.REALM = {\n"
+ + " kdc = %s\n"
+ + " kdc = localhost:%d\n"
+ + "}";
+
+ public static void main(String[] args) throws LoginException, IOException {
+ Map<String, String> principals = new HashMap<>();
+ principals.put(USER_PRINCIPAL, USER_PASSWORD);
+ principals.put(KRBTGT_PRINCIPAL, null);
+
+ System.setProperty("java.security.krb5.conf", KRB5_CONF);
+
+ // start a local KDC
+ KDC kdc = KDC.startKDC(HOST, KRB5_CONF, REALM, principals, null, null);
+
+ System.setProperty("java.security.auth.login.config",
+ TEST_SRC + File.separator + "refreshKrb5Config.jaas");
+
+ CallbackHandler handler = new Helper.UserPasswordHandler(
+ USER, USER_PASSWORD);
+
+ // create a krb5 config with non-existing host for master KDC,
+ // and wrong port for slave KDC
+ try (PrintWriter w = new PrintWriter(new FileWriter(KRB5_CONF))) {
+ w.write(String.format(KRB5_CONF_TEMPLATE,
+ KDC.KDCNameService.NOT_EXISTING_HOST, WRONG_KDC_PORT));
+ w.flush();
+ }
+
+ // login with not-refreshable config
+ try {
+ new LoginContext("NotRefreshable", handler).login();
+ throw new RuntimeException("Expected exception not thrown");
+ } catch (LoginException le) {
+ System.out.println("Expected login failure: " + le);
+ }
+
+ // create a krb5 config with non-existing host for master KDC,
+ // but correct port for slave KDC
+ try (PrintWriter w = new PrintWriter(new FileWriter(KRB5_CONF))) {
+ w.write(String.format(KRB5_CONF_TEMPLATE,
+ KDC.KDCNameService.NOT_EXISTING_HOST, kdc.getPort()));
+ w.flush();
+ }
+
+ // login with not-refreshable config
+ try {
+ new LoginContext("NotRefreshable", handler).login();
+ throw new RuntimeException("Expected exception not thrown");
+ } catch (LoginException le) {
+ System.out.println("Expected login failure: " + le);
+ }
+
+ // login with refreshable config
+ new LoginContext("Refreshable", handler).login();
+
+ System.out.println("Test passed");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/auto/Helper.java Thu Jul 23 15:27:58 2015 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2015, 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.
+ */
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+public class Helper {
+
+ static class UserPasswordHandler implements CallbackHandler {
+
+ private final String name;
+ private final String password;
+
+ UserPasswordHandler(String name, String password) {
+ this.name = name;
+ this.password = password;
+ }
+
+ @Override
+ public void handle(Callback[] callbacks)
+ throws UnsupportedCallbackException {
+ for (Callback callback : callbacks) {
+ if (callback instanceof PasswordCallback) {
+ ((PasswordCallback) callback).setPassword(
+ password.toCharArray());
+ } else if (callback instanceof NameCallback) {
+ ((NameCallback)callback).setName(name);
+ } else {
+ throw new UnsupportedCallbackException(callback);
+ }
+ }
+ }
+ }
+}
--- a/jdk/test/sun/security/krb5/auto/KDC.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/sun/security/krb5/auto/KDC.java Thu Jul 23 15:27:58 2015 -0700
@@ -28,6 +28,10 @@
import java.io.*;
import java.lang.reflect.Method;
import java.security.SecureRandom;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAmount;
+import java.time.temporal.TemporalUnit;
import java.util.*;
import java.util.concurrent.*;
@@ -939,6 +943,13 @@
} else if (till.isZero()) {
till = new KerberosTime(
new Date().getTime() + 1000 * DEFAULT_LIFETIME);
+ } else if (till.greaterThan(new KerberosTime(Instant.now()
+ .plus(1, ChronoUnit.DAYS)))) {
+ // If till is more than 1 day later, make it renewable
+ till = new KerberosTime(
+ new Date().getTime() + 1000 * DEFAULT_LIFETIME);
+ body.kdcOptions.set(KDCOptions.RENEWABLE, true);
+ if (rtime == null) rtime = till;
}
if (rtime == null && body.kdcOptions.get(KDCOptions.RENEWABLE)) {
rtime = new KerberosTime(
@@ -1320,14 +1331,17 @@
}
}
- public static void startKDC(final String host, final String krbConfFileName,
+ public static KDC startKDC(final String host, final String krbConfFileName,
final String realm, final Map<String, String> principals,
final String ktab, final KtabMode mode) {
+ KDC kdc;
try {
- KDC kdc = KDC.create(realm, host, 0, true);
+ kdc = KDC.create(realm, host, 0, true);
kdc.setOption(KDC.Option.PREAUTH_REQUIRED, Boolean.FALSE);
- KDC.saveConfig(krbConfFileName, kdc);
+ if (krbConfFileName != null) {
+ KDC.saveConfig(krbConfFileName, kdc);
+ }
// Add principals
if (principals != null) {
@@ -1379,6 +1393,7 @@
throw new RuntimeException("KDC: unexpected exception", e);
}
+ return kdc;
}
/**
@@ -1428,13 +1443,20 @@
}
public static class KDCNameService implements NameServiceDescriptor {
+
+ public static String NOT_EXISTING_HOST = "not.existing.host";
+
@Override
public NameService createNameService() throws Exception {
NameService ns = new NameService() {
@Override
public InetAddress[] lookupAllHostAddr(String host)
throws UnknownHostException {
- // Everything is localhost
+ // Everything is localhost except NOT_EXISTING_HOST
+ if (NOT_EXISTING_HOST.equals(host)) {
+ throw new UnknownHostException("Unknown host name: "
+ + NOT_EXISTING_HOST);
+ }
return new InetAddress[]{
InetAddress.getByAddress(host, new byte[]{127,0,0,1})
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/auto/LongLife.java Thu Jul 23 15:27:58 2015 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015, 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 8131051
+ * @summary KDC might issue a renewable ticket even if not requested
+ * @compile -XDignore.symbol.file LongLife.java
+ * @run main/othervm LongLife
+ */
+
+import sun.security.krb5.Config;
+
+public class LongLife {
+
+ public static void main(String[] args) throws Exception {
+
+ OneKDC kdc = new OneKDC(null).writeJAASConf();
+
+ // A lifetime 2d will make it renewable
+ KDC.saveConfig(OneKDC.KRB5_CONF, kdc,
+ "ticket_lifetime = 2d");
+ Config.refresh();
+
+ Context.fromJAAS("client");
+ }
+}
--- a/jdk/test/sun/security/krb5/auto/OneKDC.java Thu Jul 23 11:54:29 2015 -0700
+++ b/jdk/test/sun/security/krb5/auto/OneKDC.java Thu Jul 23 15:27:58 2015 -0700
@@ -95,7 +95,7 @@
* entries with names using existing OneKDC principals.
* @throws java.lang.Exception if anything goes wrong
*/
- public void writeJAASConf() throws IOException {
+ public OneKDC writeJAASConf() throws IOException {
System.setProperty("java.security.auth.login.config", JAAS_CONF);
File f = new File(JAAS_CONF);
FileOutputStream fos = new FileOutputStream(f);
@@ -123,6 +123,7 @@
" isInitiator=false;\n};\n"
).getBytes());
fos.close();
+ return this;
}
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/auto/RefreshKrb5Config.java Thu Jul 23 15:27:58 2015 -0700
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2015, 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+/*
+ * @test
+ * @bug 4745056 8075297
+ * @summary Checks if refreshKrb5Config is set to true for Krb5LoginModule,
+ * then configuration will be refreshed before login() method is called
+ * @run main/othervm RefreshKrb5Config
+ */
+public class RefreshKrb5Config {
+
+ static final String TEST_SRC = System.getProperty("test.src", ".");
+ static final String HOST = "localhost";
+ static final String NOT_EXISTING_HOST = "not.existing.host";
+ static final String REALM = "TEST.REALM";
+ static final String USER = "USER";
+ static final String USER_PRINCIPAL = USER + "@" + REALM;
+ static final String USER_PASSWORD = "password";
+ static final String KRBTGT_PRINCIPAL = "krbtgt/" + REALM;
+ static final String KRB5_CONF_FILENAME = "krb5.conf";
+
+ public static void main(String[] args) throws LoginException, IOException {
+ Map<String, String> principals = new HashMap<>();
+ principals.put(USER_PRINCIPAL, USER_PASSWORD);
+ principals.put(KRBTGT_PRINCIPAL, null);
+
+ System.setProperty("java.security.krb5.conf", KRB5_CONF_FILENAME);
+
+ // start a local KDC, and save krb5 config
+ KDC kdc = KDC.startKDC(HOST, null, REALM, principals, null, null);
+ KDC.saveConfig(KRB5_CONF_FILENAME, kdc, "max_retries = 1");
+
+ System.setProperty("java.security.auth.login.config",
+ TEST_SRC + File.separator + "refreshKrb5Config.jaas");
+
+ CallbackHandler handler = new Helper.UserPasswordHandler(
+ USER, USER_PASSWORD);
+
+ // set incorrect KDC
+ System.out.println("java.security.krb5.kdc = " + NOT_EXISTING_HOST);
+ System.setProperty("java.security.krb5.kdc", NOT_EXISTING_HOST);
+ System.out.println("java.security.krb5.realm = " + REALM);
+ System.setProperty("java.security.krb5.realm", REALM);
+ try {
+ new LoginContext("Refreshable", handler).login();
+ throw new RuntimeException("Expected exception not thrown");
+ } catch (LoginException le) {
+ System.out.println("Expected login failure: " + le);
+ }
+
+ // reset properties
+ System.out.println("Reset java.security.krb5.kdc");
+ System.clearProperty("java.security.krb5.kdc");
+ System.out.println("Reset java.security.krb5.realm");
+ System.clearProperty("java.security.krb5.realm");
+
+ // login with not-refreshable config
+ try {
+ new LoginContext("NotRefreshable", handler).login();
+ throw new RuntimeException("Expected exception not thrown");
+ } catch (LoginException le) {
+ System.out.println("Expected login failure: " + le);
+ }
+
+ // login with refreshable config
+ new LoginContext("Refreshable", handler).login();
+
+ System.out.println("Test passed");
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/auto/refreshKrb5Config.jaas Thu Jul 23 15:27:58 2015 -0700
@@ -0,0 +1,11 @@
+Refreshable {
+ com.sun.security.auth.module.Krb5LoginModule required
+ useTicketCache=false
+ refreshKrb5Config=true;
+};
+
+NotRefreshable {
+ com.sun.security.auth.module.Krb5LoginModule required
+ useTicketCache=false
+ refreshKrb5Config=false;
+};