This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/8.5.x by this push:
     new 3d564d0ae2 Fix BZ 68721 - avoid duplicate class definition
3d564d0ae2 is described below

commit 3d564d0ae2b6344c6c7f476c0a9076538a382dd2
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Mar 7 13:51:20 2024 -0500

    Fix BZ 68721 - avoid duplicate class definition
    
    Triggered if the transformation of a class also triggers loading of the
    same  class.
---
 java/org/apache/catalina/loader/WebappClassLoaderBase.java | 11 +++++++++++
 webapps/docs/changelog.xml                                 | 10 ++++++++++
 2 files changed, 21 insertions(+)

diff --git a/java/org/apache/catalina/loader/WebappClassLoaderBase.java 
b/java/org/apache/catalina/loader/WebappClassLoaderBase.java
index 66295dce8f..a2277c2067 100644
--- a/java/org/apache/catalina/loader/WebappClassLoaderBase.java
+++ b/java/org/apache/catalina/loader/WebappClassLoaderBase.java
@@ -2346,6 +2346,17 @@ public abstract class WebappClassLoaderBase extends 
URLClassLoader
             } catch (UnsupportedClassVersionError ucve) {
                 throw new UnsupportedClassVersionError(
                         ucve.getLocalizedMessage() + " " + 
sm.getString("webappClassLoader.wrongVersion", name));
+            } catch (LinkageError e) {
+                // May be caused by the transformation also triggering loading 
of the class - BZ 68721
+                try {
+                    // Try and load the already defined class
+                    clazz = findLoadedClass0(name);
+                } catch (Throwable t) {
+                    // Not BZ 68721
+                    ExceptionUtils.handleThrowable(t);
+                    // Re-throw the original exception
+                    throw e;
+                }
             }
             entry.loadedClass = clazz;
         }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 3476cffa2e..b613c6f3f7 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -119,6 +119,16 @@
         FORM authentication, ensure that neither the URI, the query string nor
         the protocol are corrupted when restoring the request body. (markt)
       </fix>
+      <fix>
+        <bug>68721</bug>: Workaround a possible cause of duplicate class
+        definitions when using <code>ClassFileTransformer</code>s and the
+        transformation of a class also triggers the loading of the same class.
+        (markt) 
+      </fix>
+    </changelog>
+  </subsection>
+  <subsection name="Coyote">
+    <changelog>
       <fix>
         Improve the HTTP/2 stream prioritisation process. If a stream uses all
         of the connection windows and still has content to write, it will now 
be


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to