This is an automated email from the ASF dual-hosted git repository.
rmaucher pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new a68eb4529e Fixes from code review
a68eb4529e is described below
commit a68eb4529e83c5fc42e4e16829a8f29fe7cf297a
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 3640ec1ef2..0a3b6b1bce 100644
--- a/java/org/apache/tomcat/util/threads/LimitLatch.java
+++ b/java/org/apache/tomcat/util/threads/LimitLatch.java
@@ -72,6 +72,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();
@@ -106,6 +109,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 849d8cd151..5ec86fa57e 100644
--- a/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
+++ b/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
@@ -844,9 +844,9 @@ public abstract class WsRemoteEndpointImplBase implements
RemoteEndpoint {
entry.getEncoder().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]