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();
}