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