RFR (XS) : 7131346 Parsing of boolean arguments to diagnostic commands is broken

Frederic Parain frederic.parain at oracle.com
Thu Jan 19 02:26:13 PST 2012


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: Frederic.Parain at Oracle.com



More information about the serviceability-dev mailing list