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