OpenJDK / amber / amber
changeset 6871:f12e5033f229
Merge
author | asaha |
---|---|
date | Fri, 16 Jul 2010 09:26:55 -0700 |
parents | 8d29f1358572 6db4b0180328 |
children | b90e4fee471f |
files | jdk/test/tools/launcher/Makefile.SolarisRunpath jdk/test/tools/launcher/lib/i386/lib32/lib32/liblibrary.so jdk/test/tools/launcher/lib/i386/lib32/liblibrary.so jdk/test/tools/launcher/lib/sparc/lib32/lib32/liblibrary.so jdk/test/tools/launcher/lib/sparc/lib32/liblibrary.so jdk/test/tools/launcher/lib/sparc/lib64/lib64/liblibrary.so jdk/test/tools/launcher/lib/sparc/lib64/liblibrary.so |
diffstat | 28 files changed, 410 insertions(+), 341 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/bin/emessages.h Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/bin/emessages.h Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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 @@ -44,7 +44,7 @@ #define JVM_ERROR1 "Error: Could not create the Java Virtual Machine.\n" GEN_ERROR #define JVM_ERROR2 "Error: Could not detach main thread.\n" JNI_ERROR -#define JVM_ERROR3 "Error: SPARC V8 processor detected; Server compiler requires V9 or better.\nUse Client compiler on V8 processors.\nCould not create the Java virtual machine." +#define JVM_ERROR3 "Error: SPARC V8 processor detected; Required V9 processors or better.\nUse JDK5 client compiler for V8 processors.\n" JVM_ERROR1 #define JAR_ERROR1 "Error: Failed to load Main-Class manifest attribute from\n%s\n%s" #define JAR_ERROR2 "Error: Unable to access jarfile %s" @@ -69,7 +69,8 @@ #define CFG_ERROR5 "Error: Could not determine application home." #define CFG_ERROR6 "Error: could not open `%s'" #define CFG_ERROR7 "Error: no known VMs. (check for corrupt jvm.cfg file)" -#define CFG_ERROR8 "Error: no `%s' JVM at `%s'." +#define CFG_ERROR8 "Error: missing `%s' JVM at `%s'.\nPlease install or use the JRE or JDK that contains these missing components." +#define CFG_ERROR9 "Error: could not determine JVM type." #define SPC_ERROR1 "Error: Syntax error in version specification \"%s\""
--- a/jdk/src/share/bin/java.c Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/bin/java.c Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2010, 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 @@ -192,8 +192,8 @@ int ret; InvocationFunctions ifn; jlong start, end; - char jrepath[MAXPATHLEN], jvmpath[MAXPATHLEN]; - char ** original_argv = argv; + char jvmpath[MAXPATHLEN]; + char jrepath[MAXPATHLEN]; _fVersion = fullversion; _dVersion = dotversion; @@ -225,14 +225,17 @@ */ SelectVersion(argc, argv, &main_class); - /* copy original argv */ - JLI_TraceLauncher("Command line Args:\n"); - original_argv = (JLI_CopyArgs(argc, (const char**)argv)); + if (JLI_IsTraceLauncher()) { + int i; + printf("Command line args:\n"); + for (i = 0; i < argc ; i++) { + printf("argv[%d] = %s\n", i, argv[i]); + } + } CreateExecutionEnvironment(&argc, &argv, jrepath, sizeof(jrepath), - jvmpath, sizeof(jvmpath), - original_argv); + jvmpath, sizeof(jvmpath)); ifn.CreateJavaVM = 0; ifn.GetDefaultJavaVMInitArgs = 0; @@ -301,22 +304,43 @@ return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret); } +/* + * Always detach the main thread so that it appears to have ended when + * the application's main method exits. This will invoke the + * uncaught exception handler machinery if main threw an + * exception. An uncaught exception handler cannot change the + * launcher's return code except by calling System.exit. + * + * Wait for all non-daemon threads to end, then destroy the VM. + * This will actually create a trivial new Java waiter thread + * named "DestroyJavaVM", but this will be seen as a different + * thread from the one that executed main, even though they are + * the same C thread. This allows mainThread.join() and + * mainThread.isAlive() to work as expected. + */ +#define LEAVE() \ + if ((*vm)->DetachCurrentThread(vm) != 0) { \ + JLI_ReportErrorMessage(JVM_ERROR2); \ + ret = 1; \ + } \ + (*vm)->DestroyJavaVM(vm); \ + return ret \ #define CHECK_EXCEPTION_NULL_LEAVE(e) \ if ((*env)->ExceptionOccurred(env)) { \ JLI_ReportExceptionDescription(env); \ - goto leave; \ + LEAVE(); \ } \ if ((e) == NULL) { \ JLI_ReportErrorMessage(JNI_ERROR); \ - goto leave; \ + LEAVE(); \ } #define CHECK_EXCEPTION_LEAVE(rv) \ if ((*env)->ExceptionOccurred(env)) { \ JLI_ReportExceptionDescription(env); \ ret = (rv); \ - goto leave; \ + LEAVE(); \ } int JNICALL @@ -349,8 +373,7 @@ PrintJavaVersion(env, showVersion); CHECK_EXCEPTION_LEAVE(0); if (printVersion) { - ret = 0; - goto leave; + LEAVE(); } } @@ -358,7 +381,7 @@ if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) { PrintUsage(env, printXUsage); CHECK_EXCEPTION_LEAVE(1); - goto leave; + LEAVE(); } FreeKnownVMs(); /* after last possible PrintUsage() */ @@ -430,30 +453,7 @@ * System.exit) will be non-zero if main threw an exception. */ ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1; - -leave: - /* - * Always detach the main thread so that it appears to have ended when - * the application's main method exits. This will invoke the - * uncaught exception handler machinery if main threw an - * exception. An uncaught exception handler cannot change the - * launcher's return code except by calling System.exit. - */ - if ((*vm)->DetachCurrentThread(vm) != 0) { - JLI_ReportErrorMessage(JVM_ERROR2); - ret = 1; - } - /* - * Wait for all non-daemon threads to end, then destroy the VM. - * This will actually create a trivial new Java waiter thread - * named "DestroyJavaVM", but this will be seen as a different - * thread from the one that executed main, even though they are - * the same C thread. This allows mainThread.join() and - * mainThread.isAlive() to work as expected. - */ - (*vm)->DestroyJavaVM(vm); - - return ret; + LEAVE(); } /* @@ -1076,15 +1076,17 @@ if (--argc >= 0) { if (jarflag) { *pjarfile = *argv++; - *pclassname = 0; + *pclassname = NULL; } else { - *pjarfile = 0; + *pjarfile = NULL; *pclassname = *argv++; } *pargc = argc; *pargv = argv; } - + if (*pjarfile == NULL && *pclassname == NULL) { + *pret = 1; + } return JNI_TRUE; }
--- a/jdk/src/share/bin/java.h Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/bin/java.h Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2010, 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 @@ -114,13 +114,19 @@ #define GetArch() GetArchPath(CURRENT_DATA_MODEL) -void CreateExecutionEnvironment(int *_argc, - char ***_argv, - char jrepath[], - jint so_jrepath, - char jvmpath[], - jint so_jvmpath, - char **original_argv); +/* + * Different platforms will implement this, here + * pargc is a pointer to the original argc, + * pargv is a pointer to the original argv, + * jrepath is an accessible path to the jre as determined by the call + * so_jrepath is the length of the buffer jrepath + * jvmpath is an accessible path to the jvm as determined by the call + * so_jvmpath is the length of the buffer jvmpath + */ +void CreateExecutionEnvironment(int *argc, char ***argv, + char *jrepath, jint so_jrepath, + char *jvmpath, jint so_jvmpath); + /* Reports an error message to stderr or a window as appropriate. */ void JLI_ReportErrorMessage(const char * message, ...);
--- a/jdk/src/share/bin/jli_util.c Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/bin/jli_util.c Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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 @@ -85,23 +85,6 @@ } /* - * Makes a copy of arguments - */ -char** -JLI_CopyArgs(int argc, const char **iargv) -{ - int i; - char** oargv = (char**)JLI_MemAlloc(sizeof(char*)*(argc+1)); - for (i = 0 ; i < argc+1 ; i++) { - oargv[i] = (iargv[i] == NULL) ? NULL : JLI_StringDup(iargv[i]); - if (iargv[i] != NULL && JLI_IsTraceLauncher() == JNI_TRUE) { - printf("\targv[%d] = '%s'\n",i,iargv[i]); - } - } - return oargv; -} - -/* * debug helpers we use */ static jboolean _launcher_debug = JNI_FALSE;
--- a/jdk/src/share/bin/jli_util.h Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/bin/jli_util.h Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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 @@ -33,7 +33,6 @@ void *JLI_MemRealloc(void *ptr, size_t size); char *JLI_StringDup(const char *s1); void JLI_MemFree(void *ptr); -char **JLI_CopyArgs(int argc, const char **iargv); int JLI_StrCCmp(const char *s1, const char* s2); @@ -56,10 +55,12 @@ #include <io.h> #define JLI_StrCaseCmp(p1, p2) stricmp((p1), (p2)) #define JLI_StrNCaseCmp(p1, p2, p3) strnicmp((p1), (p2), (p3)) +#define JLI_Snprintf _snprintf #else #include <unistd.h> #define JLI_StrCaseCmp(p1, p2) strcasecmp((p1), (p2)) #define JLI_StrNCaseCmp(p1, p2, p3) strncasecmp((p1), (p2), (p3)) +#define JLI_Snprintf snprintf #endif /* _WIN32 */ /*
--- a/jdk/src/share/classes/java/lang/AutoCloseable.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/classes/java/lang/AutoCloseable.java Fri Jul 16 09:26:55 2010 -0700 @@ -41,6 +41,13 @@ * be declared to throw more specific exceptions (or no exception * at all, if the close cannot fail). * + * <p>Note that unlike the {@link java.io.Closeable#close close} + * method of {@link java.io.Closeable}, this {@code close} method + * is <em>not</em> required to be idempotent. In other words, + * calling this {@code close} method more than once may have some + * visible side effect, unlike {@code Closeable.close} which is + * required to have no effect if called more than once. + * * @throws Exception if this resource cannot be closed */ void close() throws Exception;
--- a/jdk/src/share/classes/java/lang/System.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/classes/java/lang/System.java Fri Jul 16 09:26:55 2010 -0700 @@ -69,7 +69,7 @@ * corresponds to keyboard input or another input source specified by * the host environment or user. */ - public final static InputStream in = nullInputStream(); + public final static InputStream in = null; /** * The "standard" output stream. This stream is already @@ -96,7 +96,7 @@ * @see java.io.PrintStream#println(java.lang.Object) * @see java.io.PrintStream#println(java.lang.String) */ - public final static PrintStream out = nullPrintStream(); + public final static PrintStream out = null; /** * The "standard" error output stream. This stream is already @@ -110,7 +110,7 @@ * variable <code>out</code>, has been redirected to a file or other * destination that is typically not continuously monitored. */ - public final static PrintStream err = nullPrintStream(); + public final static PrintStream err = null; /* The security manager for the system. */ @@ -1093,26 +1093,6 @@ public static native String mapLibraryName(String libname); /** - * The following two methods exist because in, out, and err must be - * initialized to null. The compiler, however, cannot be permitted to - * inline access to them, since they are later set to more sensible values - * by initializeSystemClass(). - */ - private static InputStream nullInputStream() throws NullPointerException { - if (currentTimeMillis() > 0) { - return null; - } - throw new NullPointerException(); - } - - private static PrintStream nullPrintStream() throws NullPointerException { - if (currentTimeMillis() > 0) { - return null; - } - throw new NullPointerException(); - } - - /** * Initialize the system class. Called after thread initialization. */ private static void initializeSystemClass() {
--- a/jdk/src/share/classes/java/lang/Throwable.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/classes/java/lang/Throwable.java Fri Jul 16 09:26:55 2010 -0700 @@ -28,12 +28,12 @@ import java.util.*; /** - * The <code>Throwable</code> class is the superclass of all errors and + * The {@code Throwable} class is the superclass of all errors and * exceptions in the Java language. Only objects that are instances of this * class (or one of its subclasses) are thrown by the Java Virtual Machine or - * can be thrown by the Java <code>throw</code> statement. Similarly, only + * can be thrown by the Java {@code throw} statement. Similarly, only * this class or one of its subclasses can be the argument type in a - * <code>catch</code> clause. + * {@code catch} clause. * * For the purposes of compile-time checking of exceptions, {@code * Throwable} and any subclass of {@code Throwable} that is not also a @@ -73,11 +73,11 @@ * permit the method to throw the cause directly. For example, suppose * a persistent collection conforms to the {@link java.util.Collection * Collection} interface, and that its persistence is implemented atop - * <tt>java.io</tt>. Suppose the internals of the <tt>add</tt> method + * {@code java.io}. Suppose the internals of the {@code add} method * can throw an {@link java.io.IOException IOException}. The implementation - * can communicate the details of the <tt>IOException</tt> to its caller - * while conforming to the <tt>Collection</tt> interface by wrapping the - * <tt>IOException</tt> in an appropriate unchecked exception. (The + * can communicate the details of the {@code IOException} to its caller + * while conforming to the {@code Collection} interface by wrapping the + * {@code IOException} in an appropriate unchecked exception. (The * specification for the persistent collection should indicate that it is * capable of throwing such exceptions.) * @@ -86,7 +86,7 @@ * {@link #initCause(Throwable)} method. New throwable classes that * wish to allow causes to be associated with them should provide constructors * that take a cause and delegate (perhaps indirectly) to one of the - * <tt>Throwable</tt> constructors that takes a cause. For example: + * {@code Throwable} constructors that takes a cause. For example: * <pre> * try { * lowLevelOp(); @@ -94,10 +94,10 @@ * throw new HighLevelException(le); // Chaining-aware constructor * } * </pre> - * Because the <tt>initCause</tt> method is public, it allows a cause to be + * Because the {@code initCause} method is public, it allows a cause to be * associated with any throwable, even a "legacy throwable" whose * implementation predates the addition of the exception chaining mechanism to - * <tt>Throwable</tt>. For example: + * {@code Throwable}. For example: * <pre> * try { * lowLevelOp(); @@ -121,28 +121,28 @@ * use the standard exception chaining mechanism, while continuing to * implement their "legacy" chaining mechanisms for compatibility. * - * <p>Further, as of release 1.4, many general purpose <tt>Throwable</tt> + * <p>Further, as of release 1.4, many general purpose {@code Throwable} * classes (for example {@link Exception}, {@link RuntimeException}, * {@link Error}) have been retrofitted with constructors that take * a cause. This was not strictly necessary, due to the existence of the - * <tt>initCause</tt> method, but it is more convenient and expressive to + * {@code initCause} method, but it is more convenient and expressive to * delegate to a constructor that takes a cause. * - * <p>By convention, class <code>Throwable</code> and its subclasses have two + * <p>By convention, class {@code Throwable} and its subclasses have two * constructors, one that takes no arguments and one that takes a - * <code>String</code> argument that can be used to produce a detail message. + * {@code String} argument that can be used to produce a detail message. * Further, those subclasses that might likely have a cause associated with * them should have two more constructors, one that takes a - * <code>Throwable</code> (the cause), and one that takes a - * <code>String</code> (the detail message) and a <code>Throwable</code> (the + * {@code Throwable} (the cause), and one that takes a + * {@code String} (the detail message) and a {@code Throwable} (the * cause). * * <p>Also introduced in release 1.4 is the {@link #getStackTrace()} method, * which allows programmatic access to the stack trace information that was * previously available only in text form, via the various forms of the * {@link #printStackTrace()} method. This information has been added to the - * <i>serialized representation</i> of this class so <tt>getStackTrace</tt> - * and <tt>printStackTrace</tt> will operate properly on a throwable that + * <i>serialized representation</i> of this class so {@code getStackTrace} + * and {@code printStackTrace} will operate properly on a throwable that * was obtained by deserialization. * * @author unascribed @@ -162,7 +162,7 @@ /** * Specific details about the Throwable. For example, for - * <tt>FileNotFoundException</tt>, this contains the name of + * {@code FileNotFoundException}, this contains the name of * the file that could not be found. * * @serial @@ -212,7 +212,7 @@ private static final String SUPPRESSED_CAPTION = "Suppressed: "; /** - * Constructs a new throwable with <code>null</code> as its detail message. + * Constructs a new throwable with {@code null} as its detail message. * The cause is not initialized, and may subsequently be initialized by a * call to {@link #initCause}. * @@ -242,7 +242,7 @@ /** * Constructs a new throwable with the specified detail message and * cause. <p>Note that the detail message associated with - * <code>cause</code> is <i>not</i> automatically incorporated in + * {@code cause} is <i>not</i> automatically incorporated in * this throwable's detail message. * * <p>The {@link #fillInStackTrace()} method is called to initialize @@ -251,7 +251,7 @@ * @param message the detail message (which is saved for later retrieval * by the {@link #getMessage()} method). * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A <tt>null</tt> value is + * {@link #getCause()} method). (A {@code null} value is * permitted, and indicates that the cause is nonexistent or * unknown.) * @since 1.4 @@ -264,8 +264,8 @@ /** * Constructs a new throwable with the specified cause and a detail - * message of <tt>(cause==null ? null : cause.toString())</tt> (which - * typically contains the class and detail message of <tt>cause</tt>). + * message of {@code (cause==null ? null : cause.toString())} (which + * typically contains the class and detail message of {@code cause}). * This constructor is useful for throwables that are little more than * wrappers for other throwables (for example, {@link * java.security.PrivilegedActionException}). @@ -274,7 +274,7 @@ * the stack trace data in the newly created throwable. * * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A <tt>null</tt> value is + * {@link #getCause()} method). (A {@code null} value is * permitted, and indicates that the cause is nonexistent or * unknown.) * @since 1.4 @@ -288,8 +288,8 @@ /** * Returns the detail message string of this throwable. * - * @return the detail message string of this <tt>Throwable</tt> instance - * (which may be <tt>null</tt>). + * @return the detail message string of this {@code Throwable} instance + * (which may be {@code null}). */ public String getMessage() { return detailMessage; @@ -300,7 +300,7 @@ * Subclasses may override this method in order to produce a * locale-specific message. For subclasses that do not override this * method, the default implementation returns the same result as - * <code>getMessage()</code>. + * {@code getMessage()}. * * @return The localized description of this throwable. * @since JDK1.1 @@ -310,22 +310,22 @@ } /** - * Returns the cause of this throwable or <code>null</code> if the + * Returns the cause of this throwable or {@code null} if the * cause is nonexistent or unknown. (The cause is the throwable that * caused this throwable to get thrown.) * * <p>This implementation returns the cause that was supplied via one of - * the constructors requiring a <tt>Throwable</tt>, or that was set after + * the constructors requiring a {@code Throwable}, or that was set after * creation with the {@link #initCause(Throwable)} method. While it is * typically unnecessary to override this method, a subclass can override * it to return a cause set by some other means. This is appropriate for * a "legacy chained throwable" that predates the addition of chained - * exceptions to <tt>Throwable</tt>. Note that it is <i>not</i> - * necessary to override any of the <tt>PrintStackTrace</tt> methods, - * all of which invoke the <tt>getCause</tt> method to determine the + * exceptions to {@code Throwable}. Note that it is <i>not</i> + * necessary to override any of the {@code PrintStackTrace} methods, + * all of which invoke the {@code getCause} method to determine the * cause of a throwable. * - * @return the cause of this throwable or <code>null</code> if the + * @return the cause of this throwable or {@code null} if the * cause is nonexistent or unknown. * @since 1.4 */ @@ -345,11 +345,11 @@ * even once. * * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A <tt>null</tt> value is + * {@link #getCause()} method). (A {@code null} value is * permitted, and indicates that the cause is nonexistent or * unknown.) - * @return a reference to this <code>Throwable</code> instance. - * @throws IllegalArgumentException if <code>cause</code> is this + * @return a reference to this {@code Throwable} instance. + * @throws IllegalArgumentException if {@code cause} is this * throwable. (A throwable cannot be its own cause.) * @throws IllegalStateException if this throwable was * created with {@link #Throwable(Throwable)} or @@ -375,7 +375,7 @@ * <li> the result of invoking this object's {@link #getLocalizedMessage} * method * </ul> - * If <tt>getLocalizedMessage</tt> returns <tt>null</tt>, then just + * If {@code getLocalizedMessage} returns {@code null}, then just * the class name is returned. * * @return a string representation of this throwable. @@ -389,8 +389,8 @@ /** * Prints this throwable and its backtrace to the * standard error stream. This method prints a stack trace for this - * <code>Throwable</code> object on the error output stream that is - * the value of the field <code>System.err</code>. The first line of + * {@code Throwable} object on the error output stream that is + * the value of the field {@code System.err}. The first line of * output contains the result of the {@link #toString()} method for * this object. Remaining lines represent data previously recorded by * the method {@link #fillInStackTrace()}. The format of this @@ -435,7 +435,7 @@ * at Junk.c(Junk.java:21) * ... 3 more * </pre> - * Note the presence of lines containing the characters <tt>"..."</tt>. + * Note the presence of lines containing the characters {@code "..."}. * These lines indicate that the remainder of the stack trace for this * exception matches the indicated number of frames from the bottom of the * stack trace of the exception that was caused by this exception (the @@ -542,14 +542,17 @@ /** * Prints this throwable and its backtrace to the specified print stream. * - * @param s <code>PrintStream</code> to use for output + * @param s {@code PrintStream} to use for output */ public void printStackTrace(PrintStream s) { printStackTrace(new WrappedPrintStream(s)); } private void printStackTrace(PrintStreamOrWriter s) { - Set<Throwable> dejaVu = new HashSet<Throwable>(); + // Guard against malicious overrides of Throwable.equals by + // using a Set with identity equality semantics. + Set<Throwable> dejaVu = + Collections.newSetFromMap(new IdentityHashMap<Throwable, Boolean>()); dejaVu.add(this); synchronized (s.lock()) { @@ -616,7 +619,7 @@ * Prints this throwable and its backtrace to the specified * print writer. * - * @param s <code>PrintWriter</code> to use for output + * @param s {@code PrintWriter} to use for output * @since JDK1.1 */ public void printStackTrace(PrintWriter s) { @@ -669,10 +672,10 @@ /** * Fills in the execution stack trace. This method records within this - * <code>Throwable</code> object information about the current state of + * {@code Throwable} object information about the current state of * the stack frames for the current thread. * - * @return a reference to this <code>Throwable</code> instance. + * @return a reference to this {@code Throwable} instance. * @see java.lang.Throwable#printStackTrace() */ public synchronized native Throwable fillInStackTrace(); @@ -694,7 +697,7 @@ * this throwable is permitted to return a zero-length array from this * method. Generally speaking, the array returned by this method will * contain one element for every frame that would be printed by - * <tt>printStackTrace</tt>. + * {@code printStackTrace}. * * @return an array of stack trace elements representing the stack trace * pertaining to this throwable. @@ -727,14 +730,14 @@ * read from a serialization stream. * * @param stackTrace the stack trace elements to be associated with - * this <code>Throwable</code>. The specified array is copied by this + * this {@code Throwable}. The specified array is copied by this * call; changes in the specified array after the method invocation - * returns will have no affect on this <code>Throwable</code>'s stack + * returns will have no affect on this {@code Throwable}'s stack * trace. * - * @throws NullPointerException if <code>stackTrace</code> is - * <code>null</code>, or if any of the elements of - * <code>stackTrace</code> are <code>null</code> + * @throws NullPointerException if {@code stackTrace} is + * {@code null}, or if any of the elements of + * {@code stackTrace} are {@code null} * * @since 1.4 */ @@ -761,8 +764,8 @@ * package-protection for use by SharedSecrets. * * @param index index of the element to return. - * @throws IndexOutOfBoundsException if <tt>index < 0 || - * index >= getStackTraceDepth() </tt> + * @throws IndexOutOfBoundsException if {@code index < 0 || + * index >= getStackTraceDepth() } */ native StackTraceElement getStackTraceElement(int index); @@ -794,14 +797,27 @@ * were suppressed, typically by the automatic resource management * statement, in order to deliver this exception. * + * <p>Note that when one exception {@linkplain + * #initCause(Throwable) causes} another exception, the first + * exception is usually caught and then the second exception is + * thrown in response. In contrast, when one exception suppresses + * another, two exceptions are thrown in sibling code blocks, such + * as in a {@code try} block and in its {@code finally} block, and + * control flow can only continue with one exception so the second + * is recorded as a suppressed exception of the first. + * * @param exception the exception to be added to the list of * suppressed exceptions * @throws NullPointerException if {@code exception} is null + * @throws IllegalArgumentException if {@code exception} is this + * throwable; a throwable cannot suppress itself. * @since 1.7 */ public synchronized void addSuppressedException(Throwable exception) { if (exception == null) throw new NullPointerException(NULL_CAUSE_MESSAGE); + if (exception == this) + throw new IllegalArgumentException("Self-suppression not permitted"); if (suppressedExceptions.size() == 0) suppressedExceptions = new ArrayList<Throwable>();
--- a/jdk/src/share/classes/java/net/Inet6Address.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/classes/java/net/Inet6Address.java Fri Jul 16 09:26:55 2010 -0700 @@ -427,8 +427,9 @@ try { scope_id = deriveNumericScope (scope_ifname); } catch (UnknownHostException e) { - // should not happen - assert false; + // typically should not happen, but it may be that + // the machine being used for deserialization has + // the same interface name but without IPv6 configured. } } } catch (SocketException e) {}
--- a/jdk/src/share/classes/sun/net/httpserver/ExchangeImpl.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/classes/sun/net/httpserver/ExchangeImpl.java Fri Jul 16 09:26:55 2010 -0700 @@ -52,14 +52,16 @@ boolean http10 = false; /* for formatting the Date: header */ - static TimeZone tz; - static DateFormat df; - static { - String pattern = "EEE, dd MMM yyyy HH:mm:ss zzz"; - tz = TimeZone.getTimeZone ("GMT"); - df = new SimpleDateFormat (pattern, Locale.US); - df.setTimeZone (tz); - } + private static final String pattern = "EEE, dd MMM yyyy HH:mm:ss zzz"; + private static final TimeZone gmtTZ = TimeZone.getTimeZone("GMT"); + private static final ThreadLocal<DateFormat> dateFormat = + new ThreadLocal<DateFormat>() { + @Override protected DateFormat initialValue() { + DateFormat df = new SimpleDateFormat(pattern, Locale.US); + df.setTimeZone(gmtTZ); + return df; + } + }; private static final String HEAD = "HEAD"; @@ -206,7 +208,7 @@ PlaceholderOutputStream o = getPlaceholderResponseBody(); tmpout.write (bytes(statusLine, 0), 0, statusLine.length()); boolean noContentToSend = false; // assume there is content - rspHdrs.set ("Date", df.format (new Date())); + rspHdrs.set ("Date", dateFormat.get().format (new Date())); /* check for response type that is not allowed to send a body */
--- a/jdk/src/share/classes/sun/security/util/DerOutputStream.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/share/classes/sun/security/util/DerOutputStream.java Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -25,17 +25,16 @@ package sun.security.util; -import java.io.FilterOutputStream; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; -import java.util.Vector; import java.util.Comparator; import java.util.Arrays; import java.math.BigInteger; +import java.util.Locale; /** @@ -501,7 +500,7 @@ pattern = "yyyyMMddHHmmss'Z'"; } - SimpleDateFormat sdf = new SimpleDateFormat(pattern); + SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.US); sdf.setTimeZone(tz); byte[] time = (sdf.format(d)).getBytes("ISO-8859-1");
--- a/jdk/src/solaris/bin/java_md.c Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/solaris/bin/java_md.c Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2010, 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 @@ -183,13 +183,9 @@ } void -CreateExecutionEnvironment(int *_argcp, - char ***_argvp, - char jrepath[], - jint so_jrepath, - char jvmpath[], - jint so_jvmpath, - char **original_argv) { +CreateExecutionEnvironment(int *pargc, char ***pargv, + char jrepath[], jint so_jrepath, + char jvmpath[], jint so_jvmpath) { /* * First, determine if we are running the desired data model. If we * are running the desired data model, all the error messages @@ -200,18 +196,17 @@ * os/processor combination has dual mode capabilities. */ - int original_argc = *_argcp; jboolean jvmpathExists; /* Compute/set the name of the executable */ - SetExecname(*_argvp); + SetExecname(*pargv); /* Check data model flags, and exec process, if needed */ { char *arch = (char *)GetArch(); /* like sparc or sparcv9 */ char * jvmtype = NULL; - int argc = *_argcp; - char **argv = original_argv; + int argc = *pargc; + char **argv = *pargv; int running = CURRENT_DATA_MODEL; @@ -233,7 +228,7 @@ { /* open new scope to declare local variables */ int i; - newargv = (char **)JLI_MemAlloc((argc+1) * sizeof(*newargv)); + newargv = (char **)JLI_MemAlloc((argc+1) * sizeof(char*)); newargv[newargc++] = argv[0]; /* scan for data model arguments and remove from argument list; @@ -293,7 +288,11 @@ } jvmpath[0] = '\0'; - jvmtype = CheckJvmType(_argcp, _argvp, JNI_FALSE); + jvmtype = CheckJvmType(pargc, pargv, JNI_FALSE); + if (JLI_StrCmp(jvmtype, "ERROR") == 0) { + JLI_ReportErrorMessage(CFG_ERROR9); + exit(4); + } if (!GetJVMPath(jrepath, jvmtype, jvmpath, so_jvmpath, arch )) { JLI_ReportErrorMessage(CFG_ERROR8, jvmtype, jvmpath); @@ -309,7 +308,9 @@ if (running != wanted) { /* Find out where the JRE is that we will be using. */ if (!GetJREPath(jrepath, so_jrepath, GetArchPath(wanted), JNI_TRUE)) { - goto EndDataModelSpeculate; + /* give up and let other code report error message */ + JLI_ReportErrorMessage(JRE_ERROR2, wanted); + exit(1); } /* @@ -317,16 +318,21 @@ * selection options. */ if (ReadKnownVMs(jrepath, GetArchPath(wanted), JNI_TRUE) < 1) { - goto EndDataModelSpeculate; + /* give up and let other code report error message */ + JLI_ReportErrorMessage(JRE_ERROR2, wanted); + exit(1); } jvmpath[0] = '\0'; - jvmtype = CheckJvmType(_argcp, _argvp, JNI_TRUE); + jvmtype = CheckJvmType(pargc, pargv, JNI_TRUE); + if (JLI_StrCmp(jvmtype, "ERROR") == 0) { + JLI_ReportErrorMessage(CFG_ERROR9); + exit(4); + } + /* exec child can do error checking on the existence of the path */ jvmpathExists = GetJVMPath(jrepath, jvmtype, jvmpath, so_jvmpath, GetArchPath(wanted)); } - EndDataModelSpeculate: /* give up and let other code report error message */ - ; #else JLI_ReportErrorMessage(JRE_ERROR2, wanted); exit(1); @@ -398,9 +404,9 @@ struct stat s; if (JLI_StrChr(jvmtype, '/')) { - sprintf(jvmpath, "%s/" JVM_DLL, jvmtype); + JLI_Snprintf(jvmpath, jvmpathsize, "%s/" JVM_DLL, jvmtype); } else { - sprintf(jvmpath, "%s/lib/%s/%s/" JVM_DLL, jrepath, arch, jvmtype); + JLI_Snprintf(jvmpath, jvmpathsize, "%s/lib/%s/%s/" JVM_DLL, jrepath, arch, jvmtype); } JLI_TraceLauncher("Does `%s' exist ... ", jvmpath); @@ -424,26 +430,24 @@ if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ - sprintf(libjava, "%s/lib/%s/" JAVA_DLL, path, arch); + JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/%s/" JAVA_DLL, path, arch); if (access(libjava, F_OK) == 0) { - goto found; + JLI_TraceLauncher("JRE path is %s\n", path); + return JNI_TRUE; } /* Does the app ship a private JRE in <apphome>/jre directory? */ - sprintf(libjava, "%s/jre/lib/%s/" JAVA_DLL, path, arch); + JLI_Snprintf(libjava, sizeof(libjava), "%s/jre/lib/%s/" JAVA_DLL, path, arch); if (access(libjava, F_OK) == 0) { JLI_StrCat(path, "/jre"); - goto found; + JLI_TraceLauncher("JRE path is %s\n", path); + return JNI_TRUE; } } if (!speculative) JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL); return JNI_FALSE; - - found: - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; } jboolean @@ -463,14 +467,18 @@ int location; fp = fopen(jvmpath, "r"); - if(fp == NULL) - goto error; + if (fp == NULL) { + JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); + return JNI_FALSE; + } /* read in elf header */ count = fread((void*)(&elf_head), sizeof(Elf32_Ehdr), 1, fp); fclose(fp); - if(count < 1) - goto error; + if (count < 1) { + JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); + return JNI_FALSE; + } /* * Check for running a server vm (compiled with -xarch=v8plus) @@ -481,41 +489,42 @@ * does not have to be checked for in binaries with an LP64 data * model. */ - if(elf_head.e_machine == EM_SPARC32PLUS) { + if (elf_head.e_machine == EM_SPARC32PLUS) { char buf[257]; /* recommended buffer size from sysinfo man page */ long length; char* location; length = sysinfo(SI_ISALIST, buf, 257); - if(length > 0) { - location = JLI_StrStr(buf, "sparcv8plus "); - if(location == NULL) { + if (length > 0) { + location = JLI_StrStr(buf, "sparcv8plus "); + if (location == NULL) { JLI_ReportErrorMessage(JVM_ERROR3); return JNI_FALSE; } } } #endif - JLI_ReportErrorMessage(DLL_ERROR1, __LINE__); - goto error; + JLI_ReportErrorMessage(DLL_ERROR1, __LINE__); + JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); + return JNI_FALSE; } ifn->CreateJavaVM = (CreateJavaVM_t) - dlsym(libjvm, "JNI_CreateJavaVM"); - if (ifn->CreateJavaVM == NULL) - goto error; + dlsym(libjvm, "JNI_CreateJavaVM"); + if (ifn->CreateJavaVM == NULL) { + JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); + return JNI_FALSE; + } ifn->GetDefaultJavaVMInitArgs = (GetDefaultJavaVMInitArgs_t) dlsym(libjvm, "JNI_GetDefaultJavaVMInitArgs"); - if (ifn->GetDefaultJavaVMInitArgs == NULL) - goto error; + if (ifn->GetDefaultJavaVMInitArgs == NULL) { + JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); + return JNI_FALSE; + } return JNI_TRUE; - -error: - JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); - return JNI_FALSE; } /* @@ -575,7 +584,7 @@ char name[PATH_MAX + 2], *real; if ((JLI_StrLen(indir) + JLI_StrLen(cmd) + 1) > PATH_MAX) return 0; - sprintf(name, "%s%c%s", indir, FILE_SEPARATOR, cmd); + JLI_Snprintf(name, sizeof(name), "%s%c%s", indir, FILE_SEPARATOR, cmd); if (!ProgramExists(name)) return 0; real = JLI_MemAlloc(PATH_MAX + 2); if (!realpath(name, real)) @@ -622,7 +631,7 @@ else { /* relative path element */ char dir[2*PATH_MAX]; - sprintf(dir, "%s%c%s", getcwd(cwdbuf, sizeof(cwdbuf)), + JLI_Snprintf(dir, sizeof(dir), "%s%c%s", getcwd(cwdbuf, sizeof(cwdbuf)), FILE_SEPARATOR, s); result = Resolve(dir, program); } @@ -746,7 +755,7 @@ if (JLI_StrLen(path) + JLI_StrLen(dir) + 11 > PATH_MAX) return (0); /* Silently reject "impossibly" long paths */ - sprintf(buffer, "%s/%s/bin/java", path, dir); + JLI_Snprintf(buffer, sizeof(buffer), "%s/%s/bin/java", path, dir); return ((access(buffer, X_OK) == 0) ? 1 : 0); }
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/solaris/native/java/net/NetworkInterface.c Fri Jul 16 09:26:55 2010 -0700 @@ -129,7 +129,7 @@ static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *name, struct sockaddr *brdcast_store); static short getSubnet(JNIEnv *env, int sock, const char *ifname); -static int getIndex(JNIEnv *env, int sock, const char *ifname); +static int getIndex(int sock, const char *ifname); static int getFlags(JNIEnv *env, int sock, const char *ifname); static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf); @@ -753,19 +753,27 @@ * If IPv6 is available then enumerate IPv6 addresses. */ #ifdef AF_INET6 - sock = openSocket(env, AF_INET6); - if (sock < 0 && (*env)->ExceptionOccurred(env)) { - freeif(ifs); - return NULL; - } + + /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true, + * so we have to call ipv6_available() + */ + if (ipv6_available()) { - ifs = enumIPv6Interfaces(env, sock, ifs); - close(sock); + sock = openSocket(env, AF_INET6); + if (sock < 0 && (*env)->ExceptionOccurred(env)) { + freeif(ifs); + return NULL; + } - if ((*env)->ExceptionOccurred(env)) { - freeif(ifs); - return NULL; - } + ifs = enumIPv6Interfaces(env, sock, ifs); + close(sock); + + if ((*env)->ExceptionOccurred(env)) { + freeif(ifs); + return NULL; + } + + } #endif return ifs; @@ -911,7 +919,7 @@ CHECKED_MALLOC3(currif, netif *, sizeof(netif)+IFNAMSIZ ); currif->name = (char *) currif+sizeof(netif); strcpy(currif->name, name); - currif->index = getIndex(env,sock,name); + currif->index = getIndex(sock, name); currif->addr = NULL; currif->childs = NULL; currif->virtual = isVirtual; @@ -946,7 +954,7 @@ CHECKED_MALLOC3(currif, netif *, sizeof(netif)+ IFNAMSIZ ); currif->name = (char *) currif + sizeof(netif); strcpy(currif->name, vname); - currif->index = getIndex(env,sock,vname); + currif->index = getIndex(sock, vname); currif->addr = NULL; /* Need to duplicate the addr entry? */ currif->virtual = 1; @@ -1133,7 +1141,7 @@ #endif -static int getIndex(JNIEnv *env, int sock, const char *name){ +static int getIndex(int sock, const char *name){ /* * Try to get the interface index * (Not supported on Solaris 2.6 or 7) @@ -1390,6 +1398,13 @@ continue; } +#ifdef AF_INET6 + if (ifr->lifr_addr.ss_family == AF_INET6) { + struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifr->lifr_addr); + s6->sin6_scope_id = getIndex(sock, ifr->lifr_name); + } +#endif + /* add to the list */ ifs = addif(env, sock,ifr->lifr_name, ifs, (struct sockaddr *)&(ifr->lifr_addr),family, (short) ifr->lifr_addrlen); @@ -1407,7 +1422,7 @@ return ifs; } -static int getIndex(JNIEnv *env, int sock, const char *name){ +static int getIndex(int sock, const char *name){ /* * Try to get the interface index * (Not supported on Solaris 2.6 or 7)
--- a/jdk/src/windows/bin/java_md.c Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/src/windows/bin/java_md.c Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, 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 @@ -80,26 +80,22 @@ * */ void -CreateExecutionEnvironment(int *_argc, - char ***_argv, - char jrepath[], - jint so_jrepath, - char jvmpath[], - jint so_jvmpath, - char **original_argv) { +CreateExecutionEnvironment(int *pargc, char ***pargv, + char *jrepath, jint so_jrepath, + char *jvmpath, jint so_jvmpath) { char * jvmtype; int i = 0; - char** pargv = *_argv; int running = CURRENT_DATA_MODEL; int wanted = running; - for (i = 0; i < *_argc ; i++) { - if (JLI_StrCmp(pargv[i], "-J-d64") == 0 || JLI_StrCmp(pargv[i], "-d64") == 0) { + char** argv = *pargv; + for (i = 0; i < *pargc ; i++) { + if (JLI_StrCmp(argv[i], "-J-d64") == 0 || JLI_StrCmp(argv[i], "-d64") == 0) { wanted = 64; continue; } - if (JLI_StrCmp(pargv[i], "-J-d32") == 0 || JLI_StrCmp(pargv[i], "-d32") == 0) { + if (JLI_StrCmp(argv[i], "-J-d32") == 0 || JLI_StrCmp(argv[i], "-d32") == 0) { wanted = 32; continue; } @@ -123,7 +119,12 @@ JLI_ReportErrorMessage(CFG_ERROR7); exit(1); } - jvmtype = CheckJvmType(_argc, _argv, JNI_FALSE); + + jvmtype = CheckJvmType(pargc, pargv, JNI_FALSE); + if (JLI_StrCmp(jvmtype, "ERROR") == 0) { + JLI_ReportErrorMessage(CFG_ERROR9); + exit(4); + } jvmpath[0] = '\0'; if (!GetJVMPath(jrepath, jvmtype, jvmpath, so_jvmpath)) { @@ -131,7 +132,6 @@ exit(4); } /* If we got here, jvmpath has been correctly initialized. */ - } @@ -203,19 +203,21 @@ PREJVMSTART PreJVMStart; struct stat s; + /* Make sure the jrepath contains something */ + if (jrepath[0] == NULL) { + return; + } /* 32 bit windows only please */ - if (strcmp(GetArch(), "i386") != 0 ) { + if (JLI_StrCmp(GetArch(), "i386") != 0 ) { return; } /* Does our bundle directory exist ? */ - strcpy(tmpbuf, jrepath); - strcat(tmpbuf, "\\lib\\bundles"); + JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\lib\\bundles", jrepath); if (stat(tmpbuf, &s) != 0) { return; } /* Does our jkernel dll exist ? */ - strcpy(tmpbuf, jrepath); - strcat(tmpbuf, "\\bin\\jkernel.dll"); + JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\bin\\jkernel.dll", jrepath); if (stat(tmpbuf, &s) != 0) { return; } @@ -249,30 +251,30 @@ if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ - sprintf(javadll, "%s\\bin\\" JAVA_DLL, path); + JLI_Snprintf(javadll, sizeof(javadll), "%s\\bin\\" JAVA_DLL, path); if (stat(javadll, &s) == 0) { - goto found; + JLI_TraceLauncher("JRE path is %s\n", path); + return JNI_TRUE; } /* Does this app ship a private JRE in <apphome>\jre directory? */ - sprintf(javadll, "%s\\jre\\bin\\" JAVA_DLL, path); + JLI_Snprintf(javadll, sizeof (javadll), "%s\\jre\\bin\\" JAVA_DLL, path); if (stat(javadll, &s) == 0) { JLI_StrCat(path, "\\jre"); - goto found; + JLI_TraceLauncher("JRE path is %s\n", path); + return JNI_TRUE; } } /* Look for a public JRE on this machine. */ if (GetPublicJREHome(path, pathsize)) { - goto found; + JLI_TraceLauncher("JRE path is %s\n", path); + return JNI_TRUE; } JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL); return JNI_FALSE; - found: - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; } /* @@ -286,9 +288,9 @@ { struct stat s; if (JLI_StrChr(jvmtype, '/') || JLI_StrChr(jvmtype, '\\')) { - sprintf(jvmpath, "%s\\" JVM_DLL, jvmtype); + JLI_Snprintf(jvmpath, jvmpathsize, "%s\\" JVM_DLL, jvmtype); } else { - sprintf(jvmpath, "%s\\bin\\%s\\" JVM_DLL, jrepath, jvmtype); + JLI_Snprintf(jvmpath, jvmpathsize, "%s\\bin\\%s\\" JVM_DLL, jrepath, jvmtype); } if (stat(jvmpath, &s) == 0) { return JNI_TRUE;
--- a/jdk/test/java/lang/Throwable/SuppressedExceptions.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/test/java/lang/Throwable/SuppressedExceptions.java Fri Jul 16 09:26:55 2010 -0700 @@ -26,7 +26,7 @@ /* * @test - * @bug 6911258 6962571 + * @bug 6911258 6962571 6963622 * @summary Basic tests of suppressed exceptions * @author Joseph D. Darcy */ @@ -35,11 +35,22 @@ private static String message = "Bad suppressed exception information"; public static void main(String... args) throws Exception { + noSelfSuppression(); basicSupressionTest(); serializationTest(); selfReference(); } + private static void noSelfSuppression() { + Throwable throwable = new Throwable(); + try { + throwable.addSuppressedException(throwable); + throw new RuntimeException("IllegalArgumentException for self-suppresion not thrown."); + } catch (IllegalArgumentException iae) { + ; // Expected + } + } + private static void basicSupressionTest() { Throwable throwable = new Throwable(); RuntimeException suppressed = new RuntimeException("A suppressed exception."); @@ -156,9 +167,8 @@ throwable1.printStackTrace(); - - throwable1.addSuppressedException(throwable1); throwable1.addSuppressedException(throwable2); + throwable2.addSuppressedException(throwable1); throwable1.printStackTrace(); }
--- a/jdk/test/java/net/Inet6Address/B6214234.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/test/java/net/Inet6Address/B6214234.java Fri Jul 16 09:26:55 2010 -0700 @@ -23,7 +23,7 @@ /** * @test - * @bug 6214234 + * @bug 6214234 6967937 * @summary IPv6 scope_id for local addresses not set in Solaris 10 */ @@ -51,6 +51,7 @@ return; } if (addr.getScopeId() == 0) { + System.out.println("addr: "+ addr); throw new RuntimeException ("Non zero scope_id expected"); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/NetworkInterface/IPv4Only.java Fri Jul 16 09:26:55 2010 -0700 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010, 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 6964714 + * @run main/othervm NetworkInterfaceV6List + * @summary Test the networkinterface listing with java.net.preferIPv4Stack=true. + */ + + +import java.net.*; +import java.util.*; + + +public class IPv4Only { + public static void main(String[] args) throws Exception { + System.setProperty("java.net.preferIPv4Stack","true"); + + Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces(); + while (nifs.hasMoreElements()) { + NetworkInterface nif = nifs.nextElement(); + Enumeration<InetAddress> addrs = nif.getInetAddresses(); + while (addrs.hasMoreElements()) { + InetAddress hostAddr = addrs.nextElement(); + if ( hostAddr instanceof Inet6Address ){ + throw new RuntimeException( "NetworkInterfaceV6List failed - found v6 address " + hostAddr.getHostAddress() ); + } + } + } + } +}
--- a/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh Fri Jul 16 09:26:55 2010 -0700 @@ -23,6 +23,7 @@ # @test # @bug 6942989 +# @ignore until 6964018 is fixed # @summary Check for WeakReference leak in anonymous Logger objects # @author Daniel D. Daugherty #
--- a/jdk/test/java/util/logging/LoggerWeakRefLeak.sh Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/test/java/util/logging/LoggerWeakRefLeak.sh Fri Jul 16 09:26:55 2010 -0700 @@ -23,6 +23,7 @@ # @test # @bug 6942989 +# @ignore until 6964018 is fixed # @summary Check for WeakReference leak in Logger objects # @author Daniel D. Daugherty #
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/util/DerOutputStream/LocaleInTime.java Fri Jul 16 09:26:55 2010 -0700 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2010, 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 6670889 + * @summary Keystore created under Hindi Locale causing ArrayIndexOutOfBoundsException + * @run main/othervm -Duser.language=hi -Duser.region=IN LocaleInTime + */ + +import java.util.Date; +import sun.security.util.DerOutputStream; +import sun.security.util.DerValue; + +public class LocaleInTime { + public static void main(String args[]) throws Exception { + DerOutputStream out = new DerOutputStream(); + out.putUTCTime(new Date()); + DerValue val = new DerValue(out.toByteArray()); + System.out.println(val.getUTCTime()); + } +}
--- a/jdk/test/tools/launcher/Arrrghs.java Thu Jul 08 08:23:32 2010 -0700 +++ b/jdk/test/tools/launcher/Arrrghs.java Fri Jul 16 09:26:55 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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 @@ -23,7 +23,7 @@ /** * @test - * @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881 + * @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881 6753938 * @summary Argument parsing validation. * @compile -XDignore.symbol.file Arrrghs.java TestHelper.java * @run main Arrrghs @@ -223,6 +223,20 @@ tr.checkPositive(); tr.isNotZeroOutput(); System.out.println(tr); + + // 6753938, test for non-negative exit value for an incorrectly formed + // command line, '% java' + tr = TestHelper.doExec(TestHelper.javaCmd); + tr.checkNegative(); + tr.isNotZeroOutput(); + System.out.println(tr); + + // 6753938, test for non-negative exit value for an incorrectly formed + // command line, '% java -Xcomp' + tr = TestHelper.doExec(TestHelper.javaCmd, "-Xcomp"); + tr.checkNegative(); + tr.isNotZeroOutput(); + System.out.println(tr); } /*
--- a/jdk/test/tools/launcher/Makefile.SolarisRunpath Thu Jul 08 08:23:32 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -# Copyright (c) 2007, 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. - -# - -# This is a not quite automated Makefile to generate the Solaris -# binaries used for the SolarisRunpath.sh test. First, -# libraryCaller.java program must be compiled. Next, javah is called -# on the class file to generate the needed header file for the jni -# code. Then, 2 Solaris executables are generated in separate -# directories, a default one meant to be pointed to by LD_LIBRARY_PATH -# (this function returns 0) and another one for the data model -# specific LD_LIBRARY_PATH (this function returns the size of integers -# in the data model, 32 or 64). A better makefile would run, say -# isainfo -v, and generated binaries for all supported data models. -# To do this a mapping would be needed from data models to -# architecture dependent compiler options; e.g. 64 bit on sparc => -# -xarch=v9. Also, the settings for JINCLUDE, JAVAC, and JAVAH should -# come from the current build. The C compiler should be the one -# approved for the build. To be extra safe, the binaries should be -# generated on the oldest Solaris release supported by the current -# Java build. - -# Include directory in JRE or JDK install; e.g. -JINCLUDE=/java/re/jdk/1.4.1/latest/binaries/solaris-sparc/include - -# Path to javac executable; e.g. -JAVAC=/java/re/jdk/1.4.1/promoted/fcs/b21/binaries/solaris-sparc/bin/javac - -# Path to javah executable; e.g. -JAVAH=/java/re/jdk/1.4.1/promoted/fcs/b21/binaries/solaris-sparc/bin/javah - -# Path to C compiler; e.g. -CC=/java/devtools/sparc/SUNWspro/SC6.1/bin/cc - - -ARCH=`uname -p` - -# 32-bit Solaris Options -DM=32 -# Default architecture is fine for both sparc and x86 32-bit builds -OPTIONS= - -# 64-bit Solaris Options -#DM=64 -#OPTIONS=-xarch=v9 - - -all: libraryCaller.java libraryCaller.c - $(JAVAC) libraryCaller.java; \ - $(JAVAH) libraryCaller; \ - $(CC) -G -I$(JINCLUDE) -I$(JINCLUDE)/solaris -DRETURN_VALUE=0 \ - $(OPTIONS) libraryCaller.c \ - -o lib/$(ARCH)/lib$(DM)/liblibrary.so; \ - $(CC) -G -I$(JINCLUDE) -I$(JINCLUDE)/solaris -DRETURN_VALUE=$(DM)\ - $(OPTIONS) libraryCaller.c \ - -o lib/$(ARCH)/lib$(DM)/lib$(DM)/liblibrary.so;