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 c6c2077a9dbda532b84d4e97349dfe48d368cffd
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Jan 12 06:46:58 2026 -0500

    Throw our ClassFormatException instead of the JVM's
    ClassCircularityError
---
 src/main/java/org/apache/bcel/classfile/JavaClass.java           | 4 ++--
 src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java | 2 +-
 src/test/java/org/apache/bcel/classfile/JavaClassTest.java       | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/apache/bcel/classfile/JavaClass.java 
b/src/main/java/org/apache/bcel/classfile/JavaClass.java
index 4f578bf0..1a7bb27b 100644
--- a/src/main/java/org/apache/bcel/classfile/JavaClass.java
+++ b/src/main/java/org/apache/bcel/classfile/JavaClass.java
@@ -437,7 +437,7 @@ public class JavaClass extends AccessFlags implements 
Cloneable, Node, Comparabl
 
     private Field findFieldVisit(final String fieldName, final Type fieldType, 
final Set<JavaClass> visiting) throws ClassNotFoundException {
         if (!visiting.add(this)) {
-            throw new ClassCircularityError(getClassName());
+            throw new ClassFormatException(getClassName());
         }
         try {
             for (final Field field : fields) {
@@ -758,7 +758,7 @@ public class JavaClass extends AccessFlags implements 
Cloneable, Node, Comparabl
         visited.add(this);
         for (clazz = clazz.getSuperClass(); clazz != null; clazz = 
clazz.getSuperClass()) {
             if (!visited.add(clazz)) {
-                throw new ClassCircularityError(clazz.getClassName());
+                throw new ClassFormatException(clazz.getClassName());
             }
             allSuperClasses.add(clazz);
         }
diff --git a/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java 
b/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java
index 0140d2e8..c07ebae4 100644
--- a/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java
+++ b/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java
@@ -149,7 +149,7 @@ class JavaClassCyclicTest {
         } catch (final TimeoutException e) {
             fail("Timeout: infinite loop vulnerability detected");
         } catch (final ExecutionException e) {
-            if (e.getCause() instanceof ClassCircularityError) {
+            if (e.getCause() instanceof ClassFormatException) {
                 // Expected with fix - test passes
                 return;
             }
diff --git a/src/test/java/org/apache/bcel/classfile/JavaClassTest.java 
b/src/test/java/org/apache/bcel/classfile/JavaClassTest.java
index 1f92905b..b1faaa22 100644
--- a/src/test/java/org/apache/bcel/classfile/JavaClassTest.java
+++ b/src/test/java/org/apache/bcel/classfile/JavaClassTest.java
@@ -140,7 +140,7 @@ class JavaClassTest {
             repo.storeClass(interfaceB);
             repo.storeClass(testClass);
             Repository.setRepository(repo);
-            assertThrows(ClassCircularityError.class, () -> 
testClass.findField("nonExistentField", Type.INT));
+            assertThrows(ClassFormatException.class, () -> 
testClass.findField("nonExistentField", Type.INT));
         } finally {
             repo.removeClass(interfaceA);
             repo.removeClass(interfaceB);
@@ -153,7 +153,7 @@ class JavaClassTest {
         // Set up repository to load classes from the malicious_classes 
directory
         final String classPath = tempDir.toString() + 
System.getProperty("path.separator") + System.getProperty("java.class.path");
         Repository.setRepository(SyntheticRepository.getInstance(new 
ClassPath(classPath)));
-        assertThrows(ClassCircularityError.class, () -> 
Repository.lookupClass(CLASS_NAME).findField("nonExistentField", Type.INT));
+        assertThrows(ClassFormatException.class, () -> 
Repository.lookupClass(CLASS_NAME).findField("nonExistentField", Type.INT));
     }
 
     @Test
@@ -170,7 +170,7 @@ class JavaClassTest {
             repo.storeClass(interfaceB);
             repo.storeClass(testClass);
             Repository.setRepository(repo);
-            assertThrows(ClassCircularityError.class, () -> 
testClass.findField("nonExistentField", Type.INT));
+            assertThrows(ClassFormatException.class, () -> 
testClass.findField("nonExistentField", Type.INT));
         } finally {
             repo.removeClass(interfaceA);
             repo.removeClass(interfaceB);

Reply via email to