Author: britter Date: Wed Aug 30 19:28:20 2017 New Revision: 1806726 URL: http://svn.apache.org/viewvc?rev=1806726&view=rev Log: BCEL-287: IINC does not handle -128 properly. Thanks to Mark Roberts
Modified: commons/proper/bcel/trunk/src/changes/changes.xml commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/IINC.java Modified: commons/proper/bcel/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/changes/changes.xml?rev=1806726&r1=1806725&r2=1806726&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/changes/changes.xml [utf-8] (original) +++ commons/proper/bcel/trunk/src/changes/changes.xml [utf-8] Wed Aug 30 19:28:20 2017 @@ -63,6 +63,7 @@ The <action> type attribute can be add,u <body> <release version="6.1" date="tba" description="tba"> + <action issue="BCEL-287" type="fix" dev="britter" due-to="Mark Roberts">IINC does not handle -128 properly</action> <action issue="BCEL-283" type="fix" dev="britter" due-to="Mark Roberts">Support for StackMap should be different from StackMapTable</action> <action issue="BCEL-289" type="fix" dev="kinow">Crash when parsing constructor of inner classes with parameters annotated</action> <action issue="BCEL-276" type="fix" dev="britter" due-to="Sam Yoon">LocalVariableTypeTable is not updated.</action> Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/IINC.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/IINC.java?rev=1806726&r1=1806725&r2=1806726&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/IINC.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/IINC.java Wed Aug 30 19:28:20 2017 @@ -75,7 +75,12 @@ public class IINC extends LocalVariableI private void setWide() { - wide = (super.getIndex() > org.apache.bcel.Const.MAX_BYTE) || (Math.abs(c) > Byte.MAX_VALUE); + wide = (super.getIndex() > org.apache.bcel.Const.MAX_BYTE); + if (c > 0) { + wide = wide || (c > Byte.MAX_VALUE); + } else { + wide = wide || (c < Byte.MIN_VALUE); + } if (wide) { super.setLength(6); // wide byte included } else {