Bug#1113711: Debdiff attached
Attached is the debdiff
diff -Nru libcommons-lang3-java-3.17.0/debian/changelog libcommons-lang3-java-3.17.0/debian/changelog
--- libcommons-lang3-java-3.17.0/debian/changelog 2024-10-25 08:45:03.000000000 +0200
+++ libcommons-lang3-java-3.17.0/debian/changelog 2025-08-31 21:12:11.000000000 +0200
@@ -1,3 +1,11 @@
+libcommons-lang3-java (3.17.0-1+deb13u1) trixie; urgency=medium
+
+ * Team upload.
+ * d/patches/CVE-2025-48924.patch: Add patch to fix CVE-2025-48924.
+ - Fix an uncontrolled recursion vulnerability (closes: 1109125).
+
+ -- Daniel Leidert <dleidert@debian.org> Sun, 31 Aug 2025 21:12:11 +0200
+
libcommons-lang3-java (3.17.0-1) unstable; urgency=medium
* New upstream release
diff -Nru libcommons-lang3-java-3.17.0/debian/gbp.conf libcommons-lang3-java-3.17.0/debian/gbp.conf
--- libcommons-lang3-java-3.17.0/debian/gbp.conf 1970-01-01 01:00:00.000000000 +0100
+++ libcommons-lang3-java-3.17.0/debian/gbp.conf 2025-08-31 21:12:11.000000000 +0200
@@ -0,0 +1,3 @@
+[DEFAULT]
+debian-branch = debian/trixie
+pristine-tar = True
diff -Nru libcommons-lang3-java-3.17.0/debian/patches/CVE-2025-48924.diff libcommons-lang3-java-3.17.0/debian/patches/CVE-2025-48924.diff
--- libcommons-lang3-java-3.17.0/debian/patches/CVE-2025-48924.diff 1970-01-01 01:00:00.000000000 +0100
+++ libcommons-lang3-java-3.17.0/debian/patches/CVE-2025-48924.diff 2025-08-31 21:12:11.000000000 +0200
@@ -0,0 +1,134 @@
+From: Gary Gregory <garydgregory@gmail.com>
+Date: Sat, 21 Sep 2024 17:23:08 -0400
+Subject: Rewrite ClassUtils.getClass() without recursion to avoid
+ StackOverflowError on very long inputs.
+
+- This was found fuzz testing Apache Commons Text which relies on
+ClassUtils.
+- OssFuzz Issue 42522972:
+apache-commons-text:StringSubstitutorInterpolatorFuzzer: Security
+exception in org.apache.commons.lang3.ClassUtils.getClass
+
+Reviewed-By: Daniel Leidert <dleidert@debian.org>
+Origin: https://github.com/apache/commons-lang/commit/b424803abdb2bec818e4fbcb251ce031c22aca53
+Bug: https://github.com/advisories/GHSA-j288-q9x7-2f5v
+Bug-Debian: https://bugs.debian.org/1109125
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2025-48924
+Bug-Freexian-Security: https://deb.freexian.com/extended-lts/tracker/CVE-2025-48924
+---
+ .../java/org/apache/commons/lang3/ClassUtils.java | 34 ++++++++++-----------
+ .../commons/lang3/ClassUtilsOssFuzzTest.java | Bin 0 -> 17081 bytes
+ 2 files changed, 16 insertions(+), 18 deletions(-)
+ create mode 100644 src/test/java/org/apache/commons/lang3/ClassUtilsOssFuzzTest.java
+
+diff --git a/src/main/java/org/apache/commons/lang3/ClassUtils.java b/src/main/java/org/apache/commons/lang3/ClassUtils.java
+index 46c15f1..d41fe15 100644
+--- a/src/main/java/org/apache/commons/lang3/ClassUtils.java
++++ b/src/main/java/org/apache/commons/lang3/ClassUtils.java
+@@ -527,24 +527,21 @@ public static Class<?> getClass(final ClassLoader classLoader, final String clas
+ * @throws ClassNotFoundException if the class is not found
+ */
+ public static Class<?> getClass(final ClassLoader classLoader, final String className, final boolean initialize) throws ClassNotFoundException {
+- try {
+- final Class<?> clazz = getPrimitiveClass(className);
+- return clazz != null ? clazz : Class.forName(toCanonicalName(className), initialize, classLoader);
+- } catch (final ClassNotFoundException ex) {
+- // allow path separators (.) as inner class name separators
+- final int lastDotIndex = className.lastIndexOf(PACKAGE_SEPARATOR_CHAR);
+-
+- if (lastDotIndex != -1) {
+- try {
+- return getClass(classLoader, className.substring(0, lastDotIndex) + INNER_CLASS_SEPARATOR_CHAR + className.substring(lastDotIndex + 1),
+- initialize);
+- } catch (final ClassNotFoundException ignored) {
+- // ignore exception
++ // This method was re-written to avoid recursion and stack overflows found by fuzz testing.
++ String next = className;
++ int lastDotIndex = -1;
++ do {
++ try {
++ final Class<?> clazz = getPrimitiveClass(next);
++ return clazz != null ? clazz : Class.forName(toCanonicalName(next), initialize, classLoader);
++ } catch (final ClassNotFoundException ex) {
++ lastDotIndex = next.lastIndexOf(PACKAGE_SEPARATOR_CHAR);
++ if (lastDotIndex != -1) {
++ next = next.substring(0, lastDotIndex) + INNER_CLASS_SEPARATOR_CHAR + next.substring(lastDotIndex + 1);
+ }
+ }
+-
+- throw ex;
+- }
++ } while (lastDotIndex != -1);
++ throw new ClassNotFoundException(next);
+ }
+
+ /**
+@@ -1504,9 +1501,10 @@ public static Class<?> primitiveToWrapper(final Class<?> cls) {
+ private static String toCanonicalName(final String className) {
+ String canonicalName = StringUtils.deleteWhitespace(className);
+ Objects.requireNonNull(canonicalName, "className");
+- if (canonicalName.endsWith("[]")) {
++ final String arrayMarker = "[]";
++ if (canonicalName.endsWith(arrayMarker)) {
+ final StringBuilder classNameBuffer = new StringBuilder();
+- while (canonicalName.endsWith("[]")) {
++ while (canonicalName.endsWith(arrayMarker)) {
+ canonicalName = canonicalName.substring(0, canonicalName.length() - 2);
+ classNameBuffer.append("[");
+ }
+diff --git a/src/test/java/org/apache/commons/lang3/ClassUtilsOssFuzzTest.java b/src/test/java/org/apache/commons/lang3/ClassUtilsOssFuzzTest.java
+new file mode 100644
+index 0000000..3c9d39e
+--- /dev/null
++++ b/src/test/java/org/apache/commons/lang3/ClassUtilsOssFuzzTest.java
+@@ -0,0 +1,50 @@
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one or more
++ * contributor license agreements. See the NOTICE file distributed with
++ * this work for additional information regarding copyright ownership.
++ * The ASF licenses this file to You under the Apache License, Version 2.0
++ * (the "License"); you may not use this file except in compliance with
++ * the License. You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package org.apache.commons.lang3;
++
++import static org.junit.jupiter.api.Assertions.assertThrows;
++
++import org.junit.jupiter.api.Test;
++
++/**
++ * Tests {@link ClassUtils}.
++ */
++public class ClassUtilsOssFuzzTest {
++
++ /**
++ * Tests that no StackOverflowError is thrown.
++ * <p>
++ * OSS-Fuzz Issue 42522972: apache-commons-text:StringSubstitutorInterpolatorFuzzer: Security exception in org.apache.commons.lang3.ClassUtils.getClass
++ * </p>
++ */
++ @Test
++ public void testGetClassLongIllegalName() throws Exception {
++ // Input from Commons Text clusterfuzz-testcase-StringSubstitutorInterpolatorFuzzer-5447769450741760
++ assertThrows(ClassNotFoundException.class, () -> ClassUtils.getClass(
++ "ˇda´~e]W] ~ t $t ${.u base64encoder{con+s {.u base64encoder{con+s ~ t .................... ................ˇˇˇˇˇˇˇˇˇˇ&${localhot:ˇˇˇˇˇˇ4ˇ......... .........................s${.!. ${..