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

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


The following commit(s) were added to refs/heads/11.0.x by this push:
     new 1540c41bf3 Fixes from code review
1540c41bf3 is described below

commit 1540c41bf3014586ae3f67d64cd07c83bacd000a
Author: remm <[email protected]>
AuthorDate: Tue Jun 2 17:02:09 2026 +0200

    Fixes from code review
    
    stripSession was mistakenly removed (it is used by Import in generated
    code). Not having access to the system property means some hardcoding
    (for now). There are evidently no users of this, so this can be seen as
    example code for tag plugins (a not well known feature of Jasper).
---
 java/org/apache/jasper/tagplugins/jstl/Util.java   | 26 ++++++++++++++++++++++
 .../tomcat/util/scan/AbstractInputStreamJar.java   |  8 ++++++-
 .../tomcat/util/scan/StandardJarScanner.java       |  5 ++++-
 .../tomcat/util/threads/InlineExecutorService.java | 15 ++++++++-----
 .../org/apache/tomcat/util/threads/LimitLatch.java |  6 +++++
 .../tomcat/util/threads/LocalStrings.properties    |  1 +
 .../tomcat/websocket/DigestAuthenticator.java      |  2 +-
 .../tomcat/websocket/WsRemoteEndpointImplBase.java |  4 ++--
 8 files changed, 56 insertions(+), 11 deletions(-)

diff --git a/java/org/apache/jasper/tagplugins/jstl/Util.java 
b/java/org/apache/jasper/tagplugins/jstl/Util.java
index 77687bef46..b846d243e4 100644
--- a/java/org/apache/jasper/tagplugins/jstl/Util.java
+++ b/java/org/apache/jasper/tagplugins/jstl/Util.java
@@ -161,6 +161,32 @@ public class Util {
         return input.substring(begin, end).trim();
     }
 
+    /**
+     * Strips a servlet session ID from <code>url</code>.  The session ID
+     * is encoded as a URL "path parameter" beginning with "jsessionid=".
+     * We thus remove anything we find between ";jsessionid=" (inclusive)
+     * and either EOS or a subsequent ';' (exclusive).
+     *
+     * taken from org.apache.taglibs.standard.tag.common.core.ImportSupport
+     * @param url The URL
+     * @return the URL without a user submitted session id parameter
+     */
+    public static String stripSession(String url) {
+        StringBuilder u = new StringBuilder(url);
+        int sessionStart;
+        while ((sessionStart = u.toString().indexOf(";" + "jsessionid" /* 
FIXME */ + "=")) != -1) {
+            int sessionEnd = u.toString().indexOf(';', sessionStart + 1);
+            if (sessionEnd == -1) {
+                sessionEnd = u.toString().indexOf('?', sessionStart + 1);
+            }
+            if (sessionEnd == -1) {
+                sessionEnd = u.length();
+            }
+            u.delete(sessionStart, sessionEnd);
+        }
+        return u.toString();
+    }
+
     /**
      * Performs the following substring replacements (to facilitate output to 
XML/HTML pages):
      * <ul>
diff --git a/java/org/apache/tomcat/util/scan/AbstractInputStreamJar.java 
b/java/org/apache/tomcat/util/scan/AbstractInputStreamJar.java
index ae35262a9c..cfd80056a3 100644
--- a/java/org/apache/tomcat/util/scan/AbstractInputStreamJar.java
+++ b/java/org/apache/tomcat/util/scan/AbstractInputStreamJar.java
@@ -254,7 +254,13 @@ public abstract class AbstractInputStreamJar implements 
Jar {
                 int i = name.indexOf('/', 18);
                 if (i > 0) {
                     String baseName = name.substring(i + 1);
-                    int version = Integer.parseInt(name.substring(18, i));
+                    int version = 0;
+                    try {
+                        version = Integer.parseInt(name.substring(18, i));
+                    } catch (NumberFormatException e) {
+                        jarEntry = jarInputStream.getNextJarEntry();
+                        continue;
+                    }
 
                     // Ignore any entries targeting for a later version than
                     // the target for this runtime
diff --git a/java/org/apache/tomcat/util/scan/StandardJarScanner.java 
b/java/org/apache/tomcat/util/scan/StandardJarScanner.java
index d2d7929250..f985f4a9dd 100644
--- a/java/org/apache/tomcat/util/scan/StandardJarScanner.java
+++ b/java/org/apache/tomcat/util/scan/StandardJarScanner.java
@@ -388,6 +388,9 @@ public class StandardJarScanner implements JarScanner {
                 // Skip this URL it has already been processed
                 continue;
             }
+            if (url.getPath() == null) {
+                continue;
+            }
 
             ClassPathEntry cpe = new ClassPathEntry(url);
 
@@ -473,7 +476,7 @@ public class StandardJarScanner implements JarScanner {
             log.trace(sm.getString("jarScan.jarUrlStart", url));
         }
 
-        if ("jar".equals(url.getProtocol()) || 
url.getPath().endsWith(Constants.JAR_EXT)) {
+        if ("jar".equals(url.getProtocol()) || (url.getPath() != null && 
url.getPath().endsWith(Constants.JAR_EXT))) {
             try (Jar jar = JarFactory.newInstance(url)) {
                 if (isScanManifest()) {
                     processManifest(jar, isWebapp, classPathUrlsToProcess);
diff --git a/java/org/apache/tomcat/util/threads/InlineExecutorService.java 
b/java/org/apache/tomcat/util/threads/InlineExecutorService.java
index b56efc411f..999e2384ea 100644
--- a/java/org/apache/tomcat/util/threads/InlineExecutorService.java
+++ b/java/org/apache/tomcat/util/threads/InlineExecutorService.java
@@ -88,12 +88,15 @@ public class InlineExecutorService extends 
AbstractExecutorService {
             }
             taskRunning = true;
         }
-        command.run();
-        synchronized (lock) {
-            taskRunning = false;
-            if (shutdown) {
-                terminated = true;
-                lock.notifyAll();
+        try {
+            command.run();
+        } finally {
+            synchronized (lock) {
+                taskRunning = false;
+                if (shutdown) {
+                    terminated = true;
+                    lock.notifyAll();
+                }
             }
         }
     }
diff --git a/java/org/apache/tomcat/util/threads/LimitLatch.java 
b/java/org/apache/tomcat/util/threads/LimitLatch.java
index 5066f363d1..e2af2ec1de 100644
--- a/java/org/apache/tomcat/util/threads/LimitLatch.java
+++ b/java/org/apache/tomcat/util/threads/LimitLatch.java
@@ -74,6 +74,9 @@ public class LimitLatch {
      * @param limit - maximum number of concurrent acquisitions of this latch
      */
     public LimitLatch(long limit) {
+        if (limit < 0) {
+            throw new 
IllegalArgumentException(sm.getString("limitLatch.badLimit", 
String.valueOf(limit)));
+        }
         this.limit = limit;
         this.count = new AtomicLong(0);
         this.sync = new Sync();
@@ -108,6 +111,9 @@ public class LimitLatch {
      * @param limit The new limit
      */
     public void setLimit(long limit) {
+        if (limit < 0) {
+            throw new 
IllegalArgumentException(sm.getString("limitLatch.badLimit", 
String.valueOf(limit)));
+        }
         this.limit = limit;
     }
 
diff --git a/java/org/apache/tomcat/util/threads/LocalStrings.properties 
b/java/org/apache/tomcat/util/threads/LocalStrings.properties
index 58c40749f2..38a12a075e 100644
--- a/java/org/apache/tomcat/util/threads/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/threads/LocalStrings.properties
@@ -16,6 +16,7 @@
 # Do not edit this file directly.
 # To edit translations see: 
https://tomcat.apache.org/getinvolved.html#Translations
 
+limitLatch.badLimit=Invalid limit value [{0}]
 limitLatch.exceeded=Latch limit [{0}] exceeded
 
 taskQueue.notRunning=Executor not running, can't force a command into the queue
diff --git a/java/org/apache/tomcat/websocket/DigestAuthenticator.java 
b/java/org/apache/tomcat/websocket/DigestAuthenticator.java
index 0e0e4b482e..957222a46c 100644
--- a/java/org/apache/tomcat/websocket/DigestAuthenticator.java
+++ b/java/org/apache/tomcat/websocket/DigestAuthenticator.java
@@ -68,7 +68,7 @@ public class DigestAuthenticator extends Authenticator {
 
         StringBuilder challenge = new StringBuilder();
 
-        if (!messageQop.isEmpty()) {
+        if (messageQop != null && !messageQop.isEmpty()) {
             if (cnonceGenerator == null) {
                 synchronized (cnonceGeneratorLock) {
                     if (cnonceGenerator == null) {
diff --git a/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java 
b/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
index 49e4ba53fa..1f47f77f5e 100644
--- a/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
+++ b/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
@@ -833,9 +833,9 @@ public abstract class WsRemoteEndpointImplBase implements 
RemoteEndpoint {
             entry.encoder().destroy();
             if (instanceManager != null) {
                 try {
-                    instanceManager.destroyInstance(entry);
+                    instanceManager.destroyInstance(entry.encoder());
                 } catch (IllegalAccessException | InvocationTargetException e) 
{
-                    
log.warn(sm.getString("wsRemoteEndpoint.encoderDestroyFailed", 
encoder.getClass()), e);
+                    
log.warn(sm.getString("wsRemoteEndpoint.encoderDestroyFailed", entry.clazz()), 
e);
                 }
             }
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to