RFR: 8245153 Unicode encoded double-quoted empty string does not compile

Adam Sotona adam.sotona at oracle.com
Thu May 28 13:22:59 UTC 2020


Right, that is even better :)
Here is new webrev with the new patch and extended test:
http://cr.openjdk.java.net/~asotona/8245153/webrev.01/

Thanks,
Adam 


> On 28 May 2020, at 14:04, Jim Laskey <james.laskey at oracle.com> wrote:
> 
> Test should probably also include
> 
>   String s0 = "";
> 
> :-)
> 
>> On May 28, 2020, at 9:02 AM, Jim Laskey <james.laskey at oracle.com> wrote:
>> 
>> I've since rewritten this code (targetting for 16) to not use reset at all for this very reason. Your solution may work but the safer solution is to
>> 
>>      case 2: // Starting an empty string literal.
>>           tk = Tokens.TokenKind.STRINGLITERAL;
>>           return;
>> 
>> 
>> Your test should include:
>> 
>>   String s1 = \u0022\u0022;
>>   String s2 = "\u0022;
>>   String s3 = \u0022";
>>   String s4 = \u0022\\u0022\u0022;
>> 
>> Cheers,
>> 
>> -- Jim
>> 
>> 
>>> On May 28, 2020, at 5:38 AM, Adam Sotona <adam.sotona at oracle.com> wrote:
>>> 
>>> Hi,
>>> please help me to review fix of Unicode encoded double-quoted empty string compilation.
>>> I found the root cause is in com.sun.tools.javac.parser.JavaTokenizer::scanString(int pos). It is trying to un-read unicode quotes by calling com.sun.tools.javac.parser.UnicodeReader::reset(int pos), however that approach works only luckily when one source character matches to one String character (standard quotes in this case).
>>> If the quotes are written in Unicode notation \u0022\u0022 , the reset call moves reader.bp cursor to original pos-1 position and reads one character.  
>>> As the initial pos parameter points AFTER the last parsed character, so position of the first backslash from \u0022\u0022 is already lost and next character parsed is number 2 instead of unicode quotes.
>>> The fix just repositions reader to the right place, no matter if quotes are standard nor unicode encoded. 
>>> Plus there is a new test added for this case.
>>> 
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8245153
>>> webrev: http://cr.openjdk.java.net/~asotona/8245153/
>>> 
>>> All Tier 1, 2 and 3 tests are passing.
>>> 
>>> Thanks for the review,
>>> Adam
>> 
> 



More information about the compiler-dev mailing list