Check length of LocalVariableTable
In MethodWriter.getSize():
Currently:
if (localVar != null) {
cw.newUTF8("LocalVariableTable");
size += 8 + localVar.length;
}
Should Be:
if (localVar != null) {
cw.newUTF8("LocalVariableTable");
int localVarTableLen = 8 + localVar.length;
if(localVarTableLen > MAX_LOCALVARTABLE_SIZE)
throw new RuntimeException("Local Variable Table too large");
size += localVarTableLen;
}
I am not sure what the exact value of MAX_LOCALVARTABLE_SIZE should be.
Its lower than 65535 because we are getting bug reports with a smaller size:
java.lang.ClassFormatError: Invalid length 65246 in LocalVariableTable in class
file .....