You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2015/08/20 14:19:42 UTC
svn commit: r1696777 - in /commons/proper/bcel/trunk/src: changes/
main/java/org/apache/commons/bcel6/generic/
Author: sebb
Date: Thu Aug 20 12:19:42 2015
New Revision: 1696777
URL: http://svn.apache.org/r1696777
Log:
BCEL-249 Check for max Short seems wrong
Modified:
commons/proper/bcel/trunk/src/changes/changes.xml
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/BranchInstruction.java
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/GOTO.java
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/JSR.java
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/PUSH.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=1696777&r1=1696776&r2=1696777&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/changes/changes.xml (original)
+++ commons/proper/bcel/trunk/src/changes/changes.xml Thu Aug 20 12:19:42 2015
@@ -63,6 +63,7 @@ The <action> type attribute can be add,u
<body>
<release version="6.0" date="TBA" description="Major release with Java 7 and 8 support">
+ <action issue="BCEL-249" type="fix">Check for max Short seems wrong</action>
<action issue="BCEL-127" type="update">Document that Instruction Factory returns singleton instances</action>
<action issue="BCEL-198" type="update">better support for clone/copy methods</action>
<action issue="BCEL-242" type="remove">Remove Serializable</action>
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/BranchInstruction.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/BranchInstruction.java?rev=1696777&r1=1696776&r2=1696777&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/BranchInstruction.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/BranchInstruction.java Thu Aug 20 12:19:42 2015
@@ -63,7 +63,7 @@ public abstract class BranchInstruction
public void dump( DataOutputStream out ) throws IOException {
out.writeByte(opcode);
index = getTargetOffset();
- if (Math.abs(index) >= 32767) {
+ if (!isValidShort(index)) {
throw new ClassGenException("Branch target offset too large for short: " + index);
}
out.writeShort(index); // May be negative, i.e., point backwards
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/GOTO.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/GOTO.java?rev=1696777&r1=1696776&r2=1696777&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/GOTO.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/GOTO.java Thu Aug 20 12:19:42 2015
@@ -69,7 +69,7 @@ public class GOTO extends GotoInstructio
protected int updatePosition( int offset, int max_offset ) {
int i = getTargetOffset(); // Depending on old position value
setGetPosition(getPosition() + offset); // Position may be shifted by preceding expansions
- if (Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate)
+ if (Math.abs(i) >= (Short.MAX_VALUE - max_offset)) { // to large for short (estimate)
opcode = org.apache.commons.bcel6.Constants.GOTO_W;
short old_length = length;
length = 5;
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java?rev=1696777&r1=1696776&r2=1696777&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java Thu Aug 20 12:19:42 2015
@@ -543,4 +543,24 @@ public abstract class Instruction implem
public int hashCode() {
return opcode;
}
+
+ /**
+ * Check if the value can fit in a byte (signed)
+ * @param value the value to check
+ * @return true if the value is in range
+ * @since 6.0
+ */
+ public static boolean isValidByte(int value) {
+ return value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE;
+ }
+
+ /**
+ * Check if the value can fit in a short (signed)
+ * @param value the value to check
+ * @return true if the value is in range
+ * @since 6.0
+ */
+ public static boolean isValidShort(int value) {
+ return value >= Short.MIN_VALUE && value <= Short.MAX_VALUE;
+ }
}
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/JSR.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/JSR.java?rev=1696777&r1=1696776&r2=1696777&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/JSR.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/JSR.java Thu Aug 20 12:19:42 2015
@@ -61,7 +61,7 @@ public class JSR extends JsrInstruction
protected int updatePosition( int offset, int max_offset ) {
int i = getTargetOffset(); // Depending on old position value
setGetPosition(getPosition() + offset); // Position may be shifted by preceding expansions
- if (Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate)
+ if (Math.abs(i) >= (Short.MAX_VALUE - max_offset)) { // to large for short (estimate)
opcode = org.apache.commons.bcel6.Constants.JSR_W;
short old_length = length;
length = 5;
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/PUSH.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/PUSH.java?rev=1696777&r1=1696776&r2=1696777&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/PUSH.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/PUSH.java Thu Aug 20 12:19:42 2015
@@ -39,9 +39,9 @@ public final class PUSH implements Compo
public PUSH(ConstantPoolGen cp, int value) {
if ((value >= -1) && (value <= 5)) {
instruction = InstructionConstants.getInstruction(Constants.ICONST_0 + value);
- } else if ((value >= -128) && (value <= 127)) {
+ } else if (Instruction.isValidByte(value)) {
instruction = new BIPUSH((byte) value);
- } else if ((value >= -32768) && (value <= 32767)) {
+ } else if (Instruction.isValidShort(value)) {
instruction = new SIPUSH((short) value);
} else {
instruction = new LDC(cp.addInteger(value));