Invalid reordering in ClassReader

Eric McCorkle eric.mccorkle at oracle.com
Thu Feb 13 08:46:36 PST 2014


I'll open one.

Sent from my iPhone

> On Feb 13, 2014, at 11:43 AM, Werner Dietl <wdietl at gmail.com> wrote:
> 
> Any thoughts on this?
> Should I open an issue?
> 
> cu, WMD.
> 
>> On Fri, Feb 7, 2014 at 7:30 PM, Werner Dietl <wdietl at gmail.com> wrote:
>> This changeset:
>> 
>> http://hg.openjdk.java.net/jdk9/dev/langtools/rev/d607ae60772d
>> 
>> contains a re-ordering of how the bytecode is read.
>> 
>> --- a/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Sun
>> Feb 02 12:12:01 2014 +0100
>> +++ b/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Mon
>> Feb 03 17:19:15 2014 -0500
>> 
>>         // local variable
>> -        case LOCAL_VARIABLE:
>> -        // resource variable
>> -        case RESOURCE_VARIABLE:
>> -            int table_length = nextChar();
>> +        case LOCAL_VARIABLE: {
>> +            final int table_length = nextChar();
>> +            final TypeAnnotationPosition position =
>> +                TypeAnnotationPosition.localVariable(readTypePath());
>> +
>>             position.lvarOffset = new int[table_length];
>>             position.lvarLength = new int[table_length];
>>             position.lvarIndex = new int[table_length];
>> @@ -1498,67 +1518,142 @@ public class ClassReader {
>>                 position.lvarLength[i] = nextChar();
>>                 position.lvarIndex[i] = nextChar();
>>             }
>> -            break;
>> +            return position;
>> +        }
>> 
>> The code now reads the TypePath before the local variable information.
>> This breaks the order in which the ClassWriter writes this information.
>> 
>> This results in a ClassCastException in unrelated code, because the
>> ClassReader gets confused about the class file.
>> 
>> In type-annotations, I changed the code back:
>> 
>> http://hg.openjdk.java.net/type-annotations/type-annotations/langtools/rev/7e9c983565ac
>> 
>> and this resolves these exceptions.
>> 
>> Is there a reason for this change? I think the previous implementation
>> did the right ordering according to the spec.
>> 
>> cu, WMD.
>> 
>> --
>> http://www.google.com/profiles/wdietl
> 
> 
> 
> -- 
> http://www.google.com/profiles/wdietl


More information about the type-annotations-dev mailing list