strncasecmp(str, "true", 4) == 0 would accept
arguments like this:

 -all=truefalse

which are not valid.

Fred

On 01/19/12 11:22 AM, Dmitry Samersoff wrote:
Frederic,

I think explicit check for len is not necessary,

strncasecmp(str, "true", 4) == 0

is enough.

-Dmitry


On 2012-01-19 13:59, Frederic Parain wrote:
This is a small fix (2 lines) to fix an issue with the
parsing of boolean arguments by diagnostic commands

CR is not available on bugs.sun.com yet, but the description
says that the string comparisons to identify "true" or "false"
values doesn't take into account the length of the argument
being parse.

The suggested fix is:

--- old/src/share/vm/services/diagnosticArgument.cpp  Thu Jan 19
10:36:10 2012
+++ new/src/share/vm/services/diagnosticArgument.cpp  Thu Jan 19
10:36:10 2012
@@ -62,9 +62,9 @@
    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(),


Webrev:
http://cr.openjdk.java.net/~fparain/7131346/webrev.00/

Thanks,

Fred




--
Frederic Parain - Oracle
Grenoble Engineering Center - France
Phone: +33 4 76 18 81 17
Email: [email protected]

Reply via email to