DO NOT REPLY [Bug 48280] New: FieldInstruction.getFieldSize() doesn't decode Type.getTypeSize() output
[email protected] Wed, 25 Nov 2009 03:25:51 -0800 (PST)
| Newsgroups | gmane.comp.jakarta.bcel.devel |
|---|---|
| Message-ID | <[email protected]/bugzilla/> |
https://issues.apache.org/bugzilla/show_bug.cgi?id=48280
Summary: FieldInstruction.getFieldSize() doesn't decode
Type.getTypeSize() output
Product: BCEL
Version: unspecified
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: normal
Priority: P2
Component: Main
AssignedTo: [email protected]
ReportedBy: [email protected]
Created an attachment (id=24609)
--> (https://issues.apache.org/bugzilla/attachment.cgi?id=24609)
a patch for this bug
The method getTypeSize(String) in the Type class returns two outputs encoded in
one integer: the lowest two bits contain the field size (0, 1 or 2), the
remaining ones the no. of consumed characters in the signature. Type provides
two private static methods, size() and consumed(), to split these values apart.
The method getFieldSize(ConstantPoolGen) in the FieldInstrucion class uses
Type.getTypeSize, unaware that the output is encoded. Therefore, the returned
size is different than expected. This causes, among other things, a bigger or
smaller max stack depth value for generated methods that leads to unused stack
memory or a "java.lang.VerifyError: stack size too large" exception,
respectively.
A fix can be made by making the above-mentioned static methods package-visible
and modifying getFieldSize() to use them.
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.