This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git

commit 58916a50ab278004ca97dc63ba76ce0ee0de36f4
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Sat Nov 19 09:17:02 2022 -0500

    org.apache.bcel.classfile.StackMapEntry.StackMapEntry(DataInput,
    ConstantPool) reads signed instead of unsigned shorts from its
    DataInput.
---
 src/changes/changes.xml                                |  1 +
 .../java/org/apache/bcel/classfile/StackMapEntry.java  | 18 ++++++++++--------
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 52cca6d8..462d059c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -87,6 +87,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">InstructionConstants.ALOAD_0 value is wrong (regression from 
6.6.0).</action>
       <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">InstructionConstants.DCONST_0 value is wrong (regression from 
6.6.0).</action>
       <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid internal NPE in 
org.apache.bcel.util.ClassPath.getInputStream(String, String).</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">org.apache.bcel.classfile.StackMapEntry.StackMapEntry(DataInput, 
ConstantPool) reads signed instead of unsigned shorts from its 
DataInput.</action>
       <!-- UPDATE -->
       <action                  type="update" dev="ggregory" due-to="Gary 
Gregory">Bump spotbugs-maven-plugin from 4.7.2.2 to 4.7.3.0 #167.</action>
       <action                  type="update" dev="ggregory" 
due-to="Dependabot">Bump jmh.version from 1.35 to 1.36 #170.</action>
diff --git a/src/main/java/org/apache/bcel/classfile/StackMapEntry.java 
b/src/main/java/org/apache/bcel/classfile/StackMapEntry.java
index c23d27c7..a0c305c5 100644
--- a/src/main/java/org/apache/bcel/classfile/StackMapEntry.java
+++ b/src/main/java/org/apache/bcel/classfile/StackMapEntry.java
@@ -26,7 +26,9 @@ import org.apache.bcel.Const;
 
 /**
  * This class represents a stack map entry recording the types of local 
variables and the of stack items at a given
- * byte code offset. See CLDC specification 5.3.1.2
+ * byte code offset. See CLDC specification 5.3.1.2.
+ *
+ * See also 
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.4
  *
  * @see StackMap
  * @see StackMapType
@@ -59,27 +61,27 @@ public final class StackMapEntry implements Node, Cloneable 
{
             byteCodeOffset = frameType - Const.SAME_LOCALS_1_STACK_ITEM_FRAME;
             typesOfStackItems = new StackMapType[] { new 
StackMapType(dataInput, constantPool) };
         } else if (frameType == Const.SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED) 
{
-            byteCodeOffset = dataInput.readShort();
+            byteCodeOffset = dataInput.readUnsignedShort();
             typesOfStackItems = new StackMapType[] { new 
StackMapType(dataInput, constantPool) };
         } else if (frameType >= Const.CHOP_FRAME && frameType <= 
Const.CHOP_FRAME_MAX) {
-            byteCodeOffset = dataInput.readShort();
+            byteCodeOffset = dataInput.readUnsignedShort();
         } else if (frameType == Const.SAME_FRAME_EXTENDED) {
-            byteCodeOffset = dataInput.readShort();
+            byteCodeOffset = dataInput.readUnsignedShort();
         } else if (frameType >= Const.APPEND_FRAME && frameType <= 
Const.APPEND_FRAME_MAX) {
-            byteCodeOffset = dataInput.readShort();
+            byteCodeOffset = dataInput.readUnsignedShort();
             final int numberOfLocals = frameType - 251;
             typesOfLocals = new StackMapType[numberOfLocals];
             for (int i = 0; i < numberOfLocals; i++) {
                 typesOfLocals[i] = new StackMapType(dataInput, constantPool);
             }
         } else if (frameType == Const.FULL_FRAME) {
-            byteCodeOffset = dataInput.readShort();
-            final int numberOfLocals = dataInput.readShort();
+            byteCodeOffset = dataInput.readUnsignedShort();
+            final int numberOfLocals = dataInput.readUnsignedShort();
             typesOfLocals = new StackMapType[numberOfLocals];
             for (int i = 0; i < numberOfLocals; i++) {
                 typesOfLocals[i] = new StackMapType(dataInput, constantPool);
             }
-            final int numberOfStackItems = dataInput.readShort();
+            final int numberOfStackItems = dataInput.readUnsignedShort();
             typesOfStackItems = new StackMapType[numberOfStackItems];
             for (int i = 0; i < numberOfStackItems; i++) {
                 typesOfStackItems[i] = new StackMapType(dataInput, 
constantPool);

Reply via email to