7131346: Parsing of boolean arguments to diagnostic commands is broken
Reviewed-by: dholmes, dcubed
--- a/hotspot/src/share/vm/services/diagnosticArgument.cpp Wed Jan 25 01:16:03 2012 -0800
+++ b/hotspot/src/share/vm/services/diagnosticArgument.cpp Wed Jan 25 10:32:29 2012 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012 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
@@ -59,12 +59,13 @@
template <> void DCmdArgument<bool>::parse_value(const char* str,
size_t len, TRAPS) {
+ // len is the length of the current token starting at str
if (len == 0) {
set_value(true);
} else {
- if (strcasecmp(str, "true") == 0) {
+ if (len == strlen("true") && strncasecmp(str, "true", len) == 0) {
set_value(true);
- } else if (strcasecmp(str, "false") == 0) {
+ } else if (len == strlen("false") && strncasecmp(str, "false", len) == 0) {
set_value(false);
} else {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
--- a/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp Wed Jan 25 01:16:03 2012 -0800
+++ b/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp Wed Jan 25 10:32:29 2012 -0800
@@ -130,6 +130,9 @@
//----------------------------------------------------------------------------------------------------
// Non-standard stdlib-like stuff:
inline int strcasecmp(const char *s1, const char *s2) { return _stricmp(s1,s2); }
+inline int strncasecmp(const char *s1, const char *s2, size_t n) {
+ return _strnicmp(s1,s2,n);
+}
//----------------------------------------------------------------------------------------------------