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
The following commit(s) were added to refs/heads/master by this push:
new de5c093a org.apache.bcel.classfile.ConstantValue constructors now
throw ClassFormatException on invalid length input
de5c093a is described below
commit de5c093a8eadcb2b1b18547ba3785d60ac1c64c0
Author: Gary David Gregory (Code signing key) <[email protected]>
AuthorDate: Tue Nov 15 11:21:35 2022 -0500
org.apache.bcel.classfile.ConstantValue constructors now throw
ClassFormatException on invalid length input
---
src/changes/changes.xml | 1 +
.../org/apache/bcel/classfile/ConstantValue.java | 3 ++-
src/main/java/org/apache/bcel/util/Args.java | 20 ++++++++++++++++----
3 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f0b8a76b..79fc98e9 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -75,6 +75,7 @@ The <action> type attribute can be add,update,fix,remove.
<action type="fix" dev="markt" due-to="OSS-Fuzz">Ensure
Code attributes with invalid sizes trigger a ClassFormatException.</action>
<action type="fix" dev="ggregory" due-to="Gary
Gregory">org.apache.bcel.classfile.Deprecated constructors now throw
ClassFormatException on invalid length input.</action>
<action type="fix" dev="ggregory" due-to="Gary
Gregory">org.apache.bcel.classfile.Attribute constructors now throw
ClassFormatException on invalid name index input.</action>
+ <action type="fix" dev="ggregory" due-to="Gary
Gregory">org.apache.bcel.classfile.ConstantValue constructors now throw
ClassFormatException on invalid length input.</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>
</release>
diff --git a/src/main/java/org/apache/bcel/classfile/ConstantValue.java
b/src/main/java/org/apache/bcel/classfile/ConstantValue.java
index 00b06507..50058ba5 100644
--- a/src/main/java/org/apache/bcel/classfile/ConstantValue.java
+++ b/src/main/java/org/apache/bcel/classfile/ConstantValue.java
@@ -21,6 +21,7 @@ import java.io.DataOutputStream;
import java.io.IOException;
import org.apache.bcel.Const;
+import org.apache.bcel.util.Args;
/**
* This class is derived from <em>Attribute</em> and represents a constant
value, i.e., a default value for initializing
@@ -60,7 +61,7 @@ public final class ConstantValue extends Attribute {
* @param constantPool Array of constants
*/
public ConstantValue(final int nameIndex, final int length, final int
constantValueIndex, final ConstantPool constantPool) {
- super(Const.ATTR_CONSTANT_VALUE, nameIndex, length, constantPool);
+ super(Const.ATTR_CONSTANT_VALUE, nameIndex, Args.require(2, length,
"Invalid constant value attribute length"), constantPool);
this.constantValueIndex = constantValueIndex;
}
diff --git a/src/main/java/org/apache/bcel/util/Args.java
b/src/main/java/org/apache/bcel/util/Args.java
index 7b85e885..ae654487 100644
--- a/src/main/java/org/apache/bcel/util/Args.java
+++ b/src/main/java/org/apache/bcel/util/Args.java
@@ -27,6 +27,21 @@ import org.apache.bcel.classfile.ClassFormatException;
*/
public class Args {
+ /**
+ * Requires a specific value.
+ *
+ * @param value The value to test.
+ * @param required The required value.
+ * @param message The message prefix
+ * @return The value to test.
+ */
+ public static int require(final int value, final int required, final
String message) {
+ if (value != required) {
+ throw new ClassFormatException(String.format("%s [Value must be 0:
%,d]", message, value));
+ }
+ return value;
+ }
+
/**
* Requires a non-0 value.
*
@@ -35,10 +50,7 @@ public class Args {
* @return The value to test.
*/
public static int require0(final int value, final String message) {
- if (value != 0) {
- throw new ClassFormatException(String.format("%s [Value must be 0:
%,d]", message, value));
- }
- return value;
+ return require(value, 0, message);
}
/**