This is an automated email from the ASF dual-hosted git repository.
markt-asf pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new 6da20f64db Follow-up to 0dd86e53
6da20f64db is described below
commit 6da20f64dbb3d79f539f528f0dcb5d65976dd5d4
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Sep 30 10:34:21 2026 +0100
Follow-up to 0dd86e53
Add validation.
Avoid overflow.
Reduce code duplication.
---
.../apache/catalina/ant/AbstractCatalinaTask.java | 35 +++++++++++++++++-----
java/org/apache/catalina/ant/DeployTask.java | 5 +---
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/java/org/apache/catalina/ant/AbstractCatalinaTask.java
b/java/org/apache/catalina/ant/AbstractCatalinaTask.java
index 40176a0073..51f47b6d36 100644
--- a/java/org/apache/catalina/ant/AbstractCatalinaTask.java
+++ b/java/org/apache/catalina/ant/AbstractCatalinaTask.java
@@ -28,6 +28,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
import org.apache.catalina.util.IOTools;
import org.apache.tomcat.util.http.Method;
@@ -119,6 +120,9 @@ public abstract class AbstractCatalinaTask extends
BaseRedirectorHelperTask {
* @param timeout the timeout in seconds; zero (the default) means no
timeout
*/
public void setTimeout(int timeout) {
+ if (timeout < 0) {
+ throw new IllegalArgumentException("timeout may not be negative");
+ }
this.timeout = timeout;
}
@@ -257,10 +261,8 @@ public abstract class AbstractCatalinaTask extends
BaseRedirectorHelperTask {
hconn.setAllowUserInteraction(false);
hconn.setDoInput(true);
hconn.setUseCaches(false);
- if (timeout > 0) {
- hconn.setConnectTimeout(timeout * 1000);
- hconn.setReadTimeout(timeout * 1000);
- }
+ configureTimeout(hconn, timeout);
+
if (istream != null) {
preAuthenticate();
@@ -395,6 +397,26 @@ public abstract class AbstractCatalinaTask extends
BaseRedirectorHelperTask {
}
+ /**
+ * Configures the given connection with the given timeout.
+ *
+ * @param urlConn The connection for which the timeout should be configured
+ * @param seconds Timeout to configure in seconds
+ */
+ protected void configureTimeout(URLConnection urlConn, int seconds) {
+ if (seconds > 0) {
+ // timeout is in seconds.
+ long millis = TimeUnit.SECONDS.toMillis(seconds);
+ // This is about 24 days so is unlikely to happen but limit it to
avoid an IAE in setConnectTimeout()
+ if (millis > Integer.MAX_VALUE) {
+ millis = Integer.MAX_VALUE;
+ }
+ urlConn.setConnectTimeout((int) millis);
+ urlConn.setReadTimeout((int) millis);
+ }
+ }
+
+
/*
* This is a hack. We need to use streaming to avoid OOME on large
uploads. We'd like to use
* Authenticator.setDefault() for authentication as the JRE then provides
the DIGEST client implementation. However,
@@ -416,10 +438,7 @@ public abstract class AbstractCatalinaTask extends
BaseRedirectorHelperTask {
hconn.setAllowUserInteraction(false);
hconn.setDoInput(true);
hconn.setUseCaches(false);
- if (timeout > 0) {
- hconn.setConnectTimeout(timeout * 1000);
- hconn.setReadTimeout(timeout * 1000);
- }
+ configureTimeout(hconn, timeout);
hconn.setDoOutput(false);
hconn.setRequestMethod(Method.OPTIONS);
hconn.setRequestProperty("User-Agent", "Catalina-Ant-Task/1.0");
diff --git a/java/org/apache/catalina/ant/DeployTask.java
b/java/org/apache/catalina/ant/DeployTask.java
index 6595b20d9e..baea4fdc30 100644
--- a/java/org/apache/catalina/ant/DeployTask.java
+++ b/java/org/apache/catalina/ant/DeployTask.java
@@ -188,10 +188,7 @@ public class DeployTask extends
AbstractCatalinaCommandTask {
try {
URI uri = new URI(war);
URLConnection conn = uri.toURL().openConnection();
- if (timeout > 0) {
- conn.setConnectTimeout(timeout * 1000);
- conn.setReadTimeout(timeout * 1000);
- }
+ configureTimeout(conn, timeout);
contentLength = conn.getContentLengthLong();
stream = new BufferedInputStream(conn.getInputStream(),
1024);
} catch (IOException | URISyntaxException e) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]