This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push: new 6ef6875 Filter out classes streams through class file transformers 6ef6875 is described below commit 6ef68752dc43f9d459e0ae23a4a767112ab531b9 Author: remm <r...@apache.org> AuthorDate: Wed Feb 17 16:46:41 2021 +0100 Filter out classes streams through class file transformers Make getResourceAsStream go through the ClassFileTransformer(s) for .class resources. In a way this is consistent, but the actual reason is helping JSP work better [JDT uses that to do its compilation] if choosing a very basic runtime Jakarta conversion. I'm not seeing any basis for doing it, but it's completely unlikely to break anything either. --- .../catalina/loader/WebappClassLoaderBase.java | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/java/org/apache/catalina/loader/WebappClassLoaderBase.java b/java/org/apache/catalina/loader/WebappClassLoaderBase.java index 2bc07a1..d809c3e 100644 --- a/java/org/apache/catalina/loader/WebappClassLoaderBase.java +++ b/java/org/apache/catalina/loader/WebappClassLoaderBase.java @@ -16,6 +16,8 @@ */ package org.apache.catalina.loader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FilePermission; import java.io.IOException; @@ -1136,6 +1138,41 @@ public abstract class WebappClassLoaderBase extends URLClassLoader WebResource resource = resources.getClassLoaderResource(path); if (resource.exists()) { stream = resource.getInputStream(); + // Filter out .class resources through the ClassFileTranformer + if (name.endsWith(".class") && transformers.size() > 0) { + // If the resource is a class, decorate it with any attached transformers + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[8192]; + int numRead; + try { + while ((numRead = stream.read(buf)) >= 0) { + baos.write(buf, 0, numRead); + } + } catch (IOException e) { + log.error(sm.getString("webappClassLoader.transformError", name), e); + return null; + } finally { + try { + stream.close(); + } catch (IOException e) { + } + } + byte[] binaryContent = baos.toByteArray(); + String internalName = path.substring(1, path.length() - CLASS_FILE_SUFFIX.length()); + for (ClassFileTransformer transformer : this.transformers) { + try { + byte[] transformed = transformer.transform( + this, internalName, null, null, binaryContent); + if (transformed != null) { + binaryContent = transformed; + } + } catch (IllegalClassFormatException e) { + log.error(sm.getString("webappClassLoader.transformError", name), e); + return null; + } + } + stream = new ByteArrayInputStream(binaryContent); + } trackLastModified(path, resource); } try { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org