aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/runtime/globals.cpp
diff options
context:
space:
mode:
authornever <none@none>2008-04-03 10:20:44 -0700
committernever <none@none>2008-04-03 10:20:44 -0700
commit5db46bcd19f85ced36f26c85cf94652b067123bc (patch)
treed4d1f156176e750fc71aa9b12532987402aec312 /src/share/vm/runtime/globals.cpp
parent9e9177170f59b09d34e75f8bbdb6d0245bb2ba90 (diff)
6619271: The -Xprintflags causes the VM to segv
Summary: add null checks Reviewed-by: jrose, kvn
Diffstat (limited to 'src/share/vm/runtime/globals.cpp')
-rw-r--r--src/share/vm/runtime/globals.cpp51
1 files changed, 28 insertions, 23 deletions
diff --git a/src/share/vm/runtime/globals.cpp b/src/share/vm/runtime/globals.cpp
index 139fe1c41..f70d0c08b 100644
--- a/src/share/vm/runtime/globals.cpp
+++ b/src/share/vm/runtime/globals.cpp
@@ -68,18 +68,20 @@ void Flag::print_on(outputStream* st) {
if (is_uintx()) st->print("%-16lu", get_uintx());
if (is_ccstr()) {
const char* cp = get_ccstr();
- const char* eol;
- while ((eol = strchr(cp, '\n')) != NULL) {
- char format_buffer[FORMAT_BUFFER_LEN];
- size_t llen = pointer_delta(eol, cp, sizeof(char));
- jio_snprintf(format_buffer, FORMAT_BUFFER_LEN,
- "%%." SIZE_FORMAT "s", llen);
- st->print(format_buffer, cp);
- st->cr();
- cp = eol+1;
- st->print("%5s %-35s += ", "", name);
+ if (cp != NULL) {
+ const char* eol;
+ while ((eol = strchr(cp, '\n')) != NULL) {
+ char format_buffer[FORMAT_BUFFER_LEN];
+ size_t llen = pointer_delta(eol, cp, sizeof(char));
+ jio_snprintf(format_buffer, FORMAT_BUFFER_LEN,
+ "%%." SIZE_FORMAT "s", llen);
+ st->print(format_buffer, cp);
+ st->cr();
+ cp = eol+1;
+ st->print("%5s %-35s += ", "", name);
+ }
+ st->print("%-16s", cp);
}
- st->print("%-16s", cp);
}
st->print(" %s", kind);
st->cr();
@@ -94,18 +96,21 @@ void Flag::print_as_flag(outputStream* st) {
st->print("-XX:%s=" UINTX_FORMAT, name, get_uintx());
} else if (is_ccstr()) {
st->print("-XX:%s=", name);
- // Need to turn embedded '\n's back into separate arguments
- // Not so efficient to print one character at a time,
- // but the choice is to do the transformation to a buffer
- // and print that. And this need not be efficient.
- for (const char* cp = get_ccstr(); *cp != '\0'; cp += 1) {
- switch (*cp) {
- default:
- st->print("%c", *cp);
- break;
- case '\n':
- st->print(" -XX:%s=", name);
- break;
+ const char* cp = get_ccstr();
+ if (cp != NULL) {
+ // Need to turn embedded '\n's back into separate arguments
+ // Not so efficient to print one character at a time,
+ // but the choice is to do the transformation to a buffer
+ // and print that. And this need not be efficient.
+ for (; *cp != '\0'; cp += 1) {
+ switch (*cp) {
+ default:
+ st->print("%c", *cp);
+ break;
+ case '\n':
+ st->print(" -XX:%s=", name);
+ break;
+ }
}
}
} else {