RFR: 8267361: JavaTokenizer reads octal numbers mistakenly

Guoxiong Li gli at openjdk.java.net
Wed May 19 12:39:39 UTC 2021


On Wed, 19 May 2021 11:08:41 GMT, Jim Laskey <jlaskey at openjdk.org> wrote:

>> Hi all,
>> 
>> When compiling the following code about the wrong octal number:
>> 
>> 
>> class Digit {
>>         int n = 079;
>> }
>> 
>> 
>> The javac would output the following error message:
>> 
>> 
>> Digit.java:2: error: integer number too large
>>         int n = 079;
>>                 ^
>> 1 error
>> 
>> 
>> This error message is unclear and not silimar to other wrong numbers.
>> Considering the following code about the wrong binary, hexadecimal and floating point numbers:
>> 
>> 
>> class Digit {
>>         double a = 9.f2;
>>         int n = 0b123;
>>         int n = 0x12r3;
>> }
>> 
>> 
>> The javac would output the silimar error message: `error: ';' expected`. The whole information is shown below.
>> 
>> 
>> Digit.java:2: error: ';' expected
>>         double a = 9.f2;
>>                       ^
>> Digit.java:3: error: ';' expected
>>         int n = 0b123;
>>                    ^
>> Digit.java:4: error: ';' expected
>>         int n = 0x12r3;
>>                     ^
>> Digit.java:4: error: <identifier> expected
>>         int n = 0x12r3;
>>                       ^
>> 4 errors
>> 
>> 
>> Because the lexer(JavaTokenizer) incorrectly reads `079` as a token.
>> Then the parser(JavacParser) would throw the NumberFormatException when using the method Convert#string2int.
>> So the javac would output `integer number too large`.
>> 
>> The token  `079` is a wrong octal number token. And this is a issue of the lexer, but it is caught by the parser so that the unrelated error message is generated.
>> 
>> This patch fixes it and adds a corresponding test case.
>> Thank you for taking the time to review.
>> 
>> Best Regards,
>> -- Guoxiong
>
> The fix is reasonable but I have a concern that more tests will start failing with the fix. Would you run `make test TEST=jdk_lang` and then maybe `make test-tier1` to make sure? You'll have to have jtreg installed and add `--with-jtreg=<path to jtreg home>` to your configuration. Thank you.

@JimLaskey FYI: All the `Pre-submit tests` passed just now.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4111


More information about the compiler-dev mailing list