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

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


The following commit(s) were added to refs/heads/master by this push:
     new dbd621c2 Validate index upper bound in CPInstruction, IINC and RET 
setIndex (#506).
dbd621c2 is described below

commit dbd621c2f7ac15feaea3b29e3336ecbb2dadebc3
Author: Gary Gregory <[email protected]>
AuthorDate: Sat Jun 20 15:28:14 2026 +0000

    Validate index upper bound in CPInstruction, IINC and RET setIndex
    (#506).
    
    - Javadoc: add missing tags.
    - Better parameter names.
---
 src/changes/changes.xml                                    |  1 +
 src/main/java/org/apache/bcel/generic/CPInstruction.java   |  3 ++-
 src/main/java/org/apache/bcel/generic/IINC.java            | 11 +++++++----
 .../org/apache/bcel/generic/LocalVariableInstruction.java  | 14 ++++++++------
 src/main/java/org/apache/bcel/generic/RET.java             | 13 ++++++++-----
 5 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 15ef851d..246c0fc1 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -71,6 +71,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action                  type="fix" dev="ggregory" due-to="Dexter.k, 
Gary Gregory">Read multianewarray dimensions as unsigned byte (#504).</action>
       <action                  type="fix" dev="ggregory" due-to="Arnout 
Engelen">Site docs: clarify security model (#503).</action>
       <action                  type="fix" dev="ggregory" due-to="Dexter.k, 
Gary Gregory">Read ConstantDynamic indices as unsigned shorts (#505).</action>
+      <action                  type="fix" dev="ggregory" due-to="Dexter.k, 
Gary Gregory">Validate index upper bound in CPInstruction, IINC and RET 
setIndex (#506).</action>
       <!-- ADD -->
       <action                  type="add" dev="ggregory" due-to="nbauma109, 
Gary Gregory">Add support for permitted subclasses #493.</action>
       <action                  type="add" dev="ggregory" due-to="nbauma109, 
Gary Gregory">Add RecordComponentInfo.getAttribute(byte tag)#494.</action>
diff --git a/src/main/java/org/apache/bcel/generic/CPInstruction.java 
b/src/main/java/org/apache/bcel/generic/CPInstruction.java
index 8737c27a..259e3fdd 100644
--- a/src/main/java/org/apache/bcel/generic/CPInstruction.java
+++ b/src/main/java/org/apache/bcel/generic/CPInstruction.java
@@ -108,11 +108,12 @@ public abstract class CPInstruction extends Instruction 
implements TypedInstruct
      * Sets the index to constant pool.
      *
      * @param index in constant pool.
+     * @throws ClassGenException if index is out of bounds.
      */
     @Override
     public void setIndex(final int index) { // TODO could be package-protected?
         if (index < 0 || index > Const.MAX_SHORT) {
-            throw new ClassGenException("Illegal value: " + index);
+            throw new ClassGenException("Illegal index: " + index);
         }
         this.index = index;
     }
diff --git a/src/main/java/org/apache/bcel/generic/IINC.java 
b/src/main/java/org/apache/bcel/generic/IINC.java
index 45b479e6..2088bdc7 100644
--- a/src/main/java/org/apache/bcel/generic/IINC.java
+++ b/src/main/java/org/apache/bcel/generic/IINC.java
@@ -132,13 +132,16 @@ public class IINC extends LocalVariableInstruction {
 
     /**
      * Sets index of local variable.
+     *
+     * @param index index of local variable.
+     * @throws ClassGenException if index is out of bounds.
      */
     @Override
-    public final void setIndex(final int n) {
-        if (n < 0 || n > Const.MAX_SHORT) {
-            throw new ClassGenException("Illegal value: " + n);
+    public final void setIndex(final int index) {
+        if (index < 0 || index > Const.MAX_SHORT) {
+            throw new ClassGenException("Illegal index: " + index);
         }
-        super.setIndexOnly(n);
+        super.setIndexOnly(index);
         setWide();
     }
 
diff --git 
a/src/main/java/org/apache/bcel/generic/LocalVariableInstruction.java 
b/src/main/java/org/apache/bcel/generic/LocalVariableInstruction.java
index a0a3a6e6..45e5db88 100644
--- a/src/main/java/org/apache/bcel/generic/LocalVariableInstruction.java
+++ b/src/main/java/org/apache/bcel/generic/LocalVariableInstruction.java
@@ -165,17 +165,19 @@ public abstract class LocalVariableInstruction extends 
Instruction implements Ty
     /**
      * Sets the local variable index. also updates opcode and length TODO Why?
      *
+     * @param index local variable index (unsigned short).
+     * @throws ClassGenException if index is out of bounds.
      * @see #setIndexOnly(int)
      */
     @Override
-    public void setIndex(final int n) { // TODO could be package-protected?
-        if (n < 0 || n > Const.MAX_SHORT) {
-            throw new ClassGenException("Illegal value: " + n);
+    public void setIndex(final int index) { // TODO could be package-protected?
+        if (index < 0 || index > Const.MAX_SHORT) {
+            throw new ClassGenException("Illegal value: " + index);
         }
-        this.n = n;
+        this.n = index;
         // Cannot be < 0 as this is checked above
-        if (n <= 3) { // Use more compact instruction xLOAD_n
-            super.setOpcode((short) (cTag + n));
+        if (index <= 3) { // Use more compact instruction xLOAD_n
+            super.setOpcode((short) (cTag + index));
             super.setLength(1);
         } else {
             super.setOpcode(canonTag);
diff --git a/src/main/java/org/apache/bcel/generic/RET.java 
b/src/main/java/org/apache/bcel/generic/RET.java
index 0bf22f16..dcccb1d0 100644
--- a/src/main/java/org/apache/bcel/generic/RET.java
+++ b/src/main/java/org/apache/bcel/generic/RET.java
@@ -36,7 +36,7 @@ public class RET extends Instruction implements 
IndexedInstruction, TypedInstruc
     private int index; // index to local variable containg the return address
 
     /**
-     * Empty constructor needed for Instruction.readInstruction. Not to be 
used otherwise.
+     * Default constructor needed for Instruction.readInstruction. Not to be 
used otherwise.
      */
     RET() {
     }
@@ -113,13 +113,16 @@ public class RET extends Instruction implements 
IndexedInstruction, TypedInstruc
 
     /**
      * Sets index of local variable containg the return address
+     *
+     * @param index index of local variable containg the return address.
+     * @throws ClassGenException if index is out of bounds.
      */
     @Override
-    public final void setIndex(final int n) {
-        if (n < 0 || n > org.apache.bcel.Const.MAX_SHORT) {
-            throw new ClassGenException("Illegal value: " + n);
+    public final void setIndex(final int index) {
+        if (index < 0 || index > org.apache.bcel.Const.MAX_SHORT) {
+            throw new ClassGenException("Illegal value: " + index);
         }
-        index = n;
+        this.index = index;
         setWide();
     }
 

Reply via email to