6744783: HotSpot segfaults if given -XX options with an empty string argument
authornever
Thu, 25 Sep 2008 12:50:51 -0700
changeset 1402 ccb40ce62b79
parent 1401 e5fdc8521d1f
child 1403 3be05c51cf44
6744783: HotSpot segfaults if given -XX options with an empty string argument Reviewed-by: kamg, kvn Contributed-by: volker.simonis@gmail.com
hotspot/src/share/vm/prims/jvmtiTrace.cpp
hotspot/src/share/vm/runtime/globals.cpp
hotspot/src/share/vm/runtime/globals.hpp
--- a/hotspot/src/share/vm/prims/jvmtiTrace.cpp	Wed Sep 24 15:56:36 2008 -0700
+++ b/hotspot/src/share/vm/prims/jvmtiTrace.cpp	Thu Sep 25 12:50:51 2008 -0700
@@ -73,7 +73,7 @@
 
   const char *very_end;
   const char *curr;
-  if (strlen(TraceJVMTI)) {
+  if (TraceJVMTI != NULL) {
     curr = TraceJVMTI;
   } else {
     curr = "";  // hack in fixed tracing here
--- a/hotspot/src/share/vm/runtime/globals.cpp	Wed Sep 24 15:56:36 2008 -0700
+++ b/hotspot/src/share/vm/runtime/globals.cpp	Thu Sep 25 12:50:51 2008 -0700
@@ -355,8 +355,11 @@
   if (result == NULL) return false;
   if (!result->is_ccstr()) return false;
   ccstr old_value = result->get_ccstr();
-  char* new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1);
-  strcpy(new_value, *value);
+  char* new_value = NULL;
+  if (*value != NULL) {
+    new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1);
+    strcpy(new_value, *value);
+  }
   result->set_ccstr(new_value);
   if (result->origin == DEFAULT && old_value != NULL) {
     // Prior value is NOT heap allocated, but was a literal constant.
--- a/hotspot/src/share/vm/runtime/globals.hpp	Wed Sep 24 15:56:36 2008 -0700
+++ b/hotspot/src/share/vm/runtime/globals.hpp	Thu Sep 25 12:50:51 2008 -0700
@@ -692,7 +692,7 @@
   diagnostic(bool, PrintAssembly, false,                                    \
           "Print assembly code (using external disassembler.so)")           \
                                                                             \
-  diagnostic(ccstr, PrintAssemblyOptions, false,                            \
+  diagnostic(ccstr, PrintAssemblyOptions, NULL,                             \
           "Options string passed to disassembler.so")                       \
                                                                             \
   diagnostic(bool, PrintNMethods, false,                                    \
@@ -833,7 +833,7 @@
           "Use LWP-based instead of libthread-based synchronization "       \
           "(SPARC only)")                                                   \
                                                                             \
-  product(ccstr, SyncKnobs, "",                                             \
+  product(ccstr, SyncKnobs, NULL,                                           \
           "(Unstable) Various monitor synchronization tunables")            \
                                                                             \
   product(intx, EmitSync, 0,                                                \
@@ -1017,7 +1017,7 @@
   notproduct(bool, TraceJVMCalls, false,                                    \
           "Trace JVM calls")                                                \
                                                                             \
-  product(ccstr, TraceJVMTI, "",                                            \
+  product(ccstr, TraceJVMTI, NULL,                                          \
           "Trace flags for JVMTI functions and events")                     \
                                                                             \
   /* This option can change an EMCP method into an obsolete method. */      \