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

Dmitry Samersoff Dmitry.Samersoff at oracle.com
Thu Jan 19 02:48:49 PST 2012


Frederic,

Sorry, of course

 strncasecmp(str, "true", 4) == 0 && str[4] == 0

-Dmitry

On 2012-01-19 14:26, Frederic Parain wrote:
> 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
>>>
>>
>>
> 


-- 
Dmitry Samersoff
Java Hotspot development team, SPB04
* There will come soft rains ...


More information about the serviceability-dev mailing list