Re: [PR] Fix ide-support for idea [tomcat]
isapir commented on PR #731: URL: https://github.com/apache/tomcat/pull/731#issuecomment-2144252838 @dsoumis I pushed a patch that sets the Language Level to Experimental: https://github.com/apache/tomcat/commit/f8eecc13b53fdca998565455d3c27e9b9a6cd8dc Can you pull it and check if it resolves the issue for you? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
(tomcat) branch main updated: Set IntelliJ IDEA IDE Language Level to Experimental
This is an automated email from the ASF dual-hosted git repository. isapir pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git The following commit(s) were added to refs/heads/main by this push: new f8eecc13b5 Set IntelliJ IDEA IDE Language Level to Experimental f8eecc13b5 is described below commit f8eecc13b53fdca998565455d3c27e9b9a6cd8dc Author: Igal Sapir AuthorDate: Sun Jun 2 21:24:48 2024 -0700 Set IntelliJ IDEA IDE Language Level to Experimental --- res/ide-support/idea/misc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/ide-support/idea/misc.xml b/res/ide-support/idea/misc.xml index 0f6a7a25c6..cad3644ab6 100644 --- a/res/ide-support/idea/misc.xml +++ b/res/ide-support/idea/misc.xml @@ -16,7 +16,7 @@ limitations under the License. --> - + \ No newline at end of file - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: [PR] Fix ide-support for idea [tomcat]
isapir commented on PR #731: URL: https://github.com/apache/tomcat/pull/731#issuecomment-2144037801 @dsoumis I got it to work by setting the Project's `Language level` to "X - Experimental features" ![image](https://github.com/apache/tomcat/assets/885907/41c6646c-a767-48d3-ad2b-c8b2dbce9e81) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
(tomcat-native) branch 1.3.x updated: Add changelog
This is an automated email from the ASF dual-hosted git repository. schultz pushed a commit to branch 1.3.x in repository https://gitbox.apache.org/repos/asf/tomcat-native.git The following commit(s) were added to refs/heads/1.3.x by this push: new 2c21cf47d Add changelog 2c21cf47d is described below commit 2c21cf47deb8a432b0c1e0db7a814d9323478708 Author: Christopher Schultz AuthorDate: Sun Jun 2 10:42:42 2024 -0400 Add changelog --- xdocs/miscellaneous/changelog.xml | 7 +++ 1 file changed, 7 insertions(+) diff --git a/xdocs/miscellaneous/changelog.xml b/xdocs/miscellaneous/changelog.xml index 4e62e78ac..7b2e74142 100644 --- a/xdocs/miscellaneous/changelog.xml +++ b/xdocs/miscellaneous/changelog.xml @@ -40,6 +40,13 @@ until properly addressed with https://github.com/openssl/openssl/issues/24416. (michaelo) + + Use ERR_error_string_n with a definite buffer length as a named constant. + (schultz) + + + Ensure local reference capacity is available when creating new arrays + and Strings. (schultz) - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
(tomcat-native) branch main updated: Add changelog
This is an automated email from the ASF dual-hosted git repository. schultz pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat-native.git The following commit(s) were added to refs/heads/main by this push: new 5b97d9232 Add changelog 5b97d9232 is described below commit 5b97d9232997c6e6adadfe50601b6fa2591ede68 Author: Christopher Schultz AuthorDate: Sun Jun 2 10:42:42 2024 -0400 Add changelog --- xdocs/miscellaneous/changelog.xml | 7 +++ 1 file changed, 7 insertions(+) diff --git a/xdocs/miscellaneous/changelog.xml b/xdocs/miscellaneous/changelog.xml index 9127260c1..59ec98a58 100644 --- a/xdocs/miscellaneous/changelog.xml +++ b/xdocs/miscellaneous/changelog.xml @@ -40,6 +40,13 @@ until properly addressed with https://github.com/openssl/openssl/issues/24416. (michaelo) + + Use ERR_error_string_n with a definite buffer length as a named constant. + (schultz) + + + Ensure local reference capacity is available when creating new arrays + and Strings. (schultz) - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
(tomcat-native) branch 1.3.x updated: Use ERR_error_string_n instead of ERR_error_string.
This is an automated email from the ASF dual-hosted git repository. schultz pushed a commit to branch 1.3.x in repository https://gitbox.apache.org/repos/asf/tomcat-native.git The following commit(s) were added to refs/heads/1.3.x by this push: new 827f57853 Use ERR_error_string_n instead of ERR_error_string. 827f57853 is described below commit 827f578536ea4a6f580fc7b58454c107be38d880 Author: Christopher Schultz AuthorDate: Wed May 15 09:14:14 2024 -0400 Use ERR_error_string_n instead of ERR_error_string. Use header-defined constant for error message buffer sizes. --- native/include/ssl_private.h | 5 +++ native/src/ssl.c | 8 ++--- native/src/sslconf.c | 16 +- native/src/sslcontext.c | 76 ++-- 4 files changed, 55 insertions(+), 50 deletions(-) diff --git a/native/include/ssl_private.h b/native/include/ssl_private.h index aab34cc9d..3eefd13ed 100644 --- a/native/include/ssl_private.h +++ b/native/include/ssl_private.h @@ -67,6 +67,11 @@ extern ENGINE *tcn_ssl_engine; #define SSL_AIDX_ECC (3) #define SSL_AIDX_MAX (4) +/* + * The length of error message strings. MUST BE AT LEAST 256. + */ +#define TCN_OPENSSL_ERROR_STRING_LENGTH 256 + /* * Define the SSL options */ diff --git a/native/src/ssl.c b/native/src/ssl.c index 5ca7c0781..40d9c9380 100644 --- a/native/src/ssl.c +++ b/native/src/ssl.c @@ -1509,9 +1509,9 @@ TCN_IMPLEMENT_CALL(jbyteArray, SSL, getPeerCertificate)(TCN_STDARGS, TCN_IMPLEMENT_CALL(jstring, SSL, getErrorString)(TCN_STDARGS, jlong number) { -char buf[256]; +char buf[TCN_OPENSSL_ERROR_STRING_LENGTH]; UNREFERENCED(o); -ERR_error_string(number, buf); +ERR_error_string_n(number, buf, TCN_OPENSSL_ERROR_STRING_LENGTH); return tcn_new_string(e, buf); } @@ -1673,8 +1673,8 @@ TCN_IMPLEMENT_CALL(jboolean, SSL, setCipherSuites)(TCN_STDARGS, jlong ssl, return JNI_FALSE; } if (!SSL_set_cipher_list(ssl_, J2S(ciphers))) { -char err[256]; -ERR_error_string(SSL_ERR_get(), err); +char err[TCN_OPENSSL_ERROR_STRING_LENGTH]; +ERR_error_string_n(SSL_ERR_get(), err, TCN_OPENSSL_ERROR_STRING_LENGTH); tcn_Throw(e, "Unable to configure permitted SSL ciphers (%s)", err); rv = JNI_FALSE; } diff --git a/native/src/sslconf.c b/native/src/sslconf.c index 6ff028b66..603e84288 100644 --- a/native/src/sslconf.c +++ b/native/src/sslconf.c @@ -96,8 +96,8 @@ TCN_IMPLEMENT_CALL(jlong, SSLConf, make)(TCN_STDARGS, jlong pool, ec = SSL_ERR_get(); if (!cctx || ec != 0) { if (ec != 0) { -char err[256]; -ERR_error_string(ec, err); +char err[TCN_OPENSSL_ERROR_STRING_LENGTH]; +ERR_error_string_n(ec, err, TCN_OPENSSL_ERROR_STRING_LENGTH); tcn_Throw(e, "Could not create SSL_CONF context (%s)", err); } else { tcn_Throw(e, "Could not create SSL_CONF context"); @@ -169,8 +169,8 @@ TCN_IMPLEMENT_CALL(jint, SSLConf, check)(TCN_STDARGS, jlong cctx, value_type = SSL_CONF_cmd_value_type(c->cctx, J2S(cmd)); ec = SSL_ERR_get(); if (ec != 0) { -char err[256]; -ERR_error_string(ec, err); +char err[TCN_OPENSSL_ERROR_STRING_LENGTH]; +ERR_error_string_n(ec, err, TCN_OPENSSL_ERROR_STRING_LENGTH); tcn_Throw(e, "Could not determine SSL_CONF command type for '%s' (%s)", J2S(cmd), err); return 0; } @@ -272,8 +272,8 @@ TCN_IMPLEMENT_CALL(jint, SSLConf, apply)(TCN_STDARGS, jlong cctx, ec = SSL_ERR_get(); if (rc <= 0 || ec != 0) { if (ec != 0) { -char err[256]; -ERR_error_string(ec, err); +char err[TCN_OPENSSL_ERROR_STRING_LENGTH]; +ERR_error_string_n(ec, err, TCN_OPENSSL_ERROR_STRING_LENGTH); tcn_Throw(e, "Could not apply SSL_CONF command '%s' with value '%s' (%s)", J2S(cmd), buf != NULL ? buf : J2S(value), err); } else { tcn_Throw(e, "Could not apply SSL_CONF command '%s' with value '%s'", J2S(cmd), buf != NULL ? buf : J2S(value)); @@ -304,8 +304,8 @@ TCN_IMPLEMENT_CALL(jint, SSLConf, finish)(TCN_STDARGS, jlong cctx) ec = SSL_ERR_get(); if (rc <= 0 || ec != 0) { if (ec != 0) { -char err[256]; -ERR_error_string(ec, err); +char err[TCN_OPENSSL_ERROR_STRING_LENGTH]; +ERR_error_string_n(ec, err, TCN_OPENSSL_ERROR_STRING_LENGTH); tcn_Throw(e, "Could not finish SSL_CONF commands (%s)", err); } else { tcn_Throw(e, "Could not finish SSL_CONF commands"); diff --git a/native/src/sslcontext.c b/native/src/sslcontext.c index 76662cc09..30018ac4c 100644 --- a/native/src/sslcontext.c +++ b/native/src/sslcontext.c @@ -264,8 +264,8 @@ TCN_IMPLEMENT_CALL(jlong, SSLContext, make)(TCN_STDARGS, jlong pool, } if (!ctx) { -char err[256]; -
(tomcat-native) branch 1.3.x updated: Ensure local reference capacity is available for array allocations.
This is an automated email from the ASF dual-hosted git repository. schultz pushed a commit to branch 1.3.x in repository https://gitbox.apache.org/repos/asf/tomcat-native.git The following commit(s) were added to refs/heads/1.3.x by this push: new b75a3f198 Ensure local reference capacity is available for array allocations. b75a3f198 is described below commit b75a3f1985c6b642556179d01fb1e298d41146fd Author: Christopher Schultz AuthorDate: Thu May 16 09:51:45 2024 -0400 Ensure local reference capacity is available for array allocations. --- native/src/jnilib.c | 14 -- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/native/src/jnilib.c b/native/src/jnilib.c index f46774ac2..65f889eca 100644 --- a/native/src/jnilib.c +++ b/native/src/jnilib.c @@ -156,6 +156,9 @@ jstring tcn_new_stringn(JNIEnv *env, const char *str, size_t l) jbyteArray tcn_new_arrayb(JNIEnv *env, const unsigned char *data, size_t len) { +if ((*env)->EnsureLocalCapacity(env, 1) < 0) { +return NULL; /* out of memory error */ +} jbyteArray bytes = (*env)->NewByteArray(env, (jsize)len); if (bytes != NULL) { (*env)->SetByteArrayRegion(env, bytes, 0, (jint)len, (jbyte *)data); @@ -165,15 +168,22 @@ jbyteArray tcn_new_arrayb(JNIEnv *env, const unsigned char *data, size_t len) jobjectArray tcn_new_arrays(JNIEnv *env, size_t len) { +if ((*env)->EnsureLocalCapacity(env, 1) < 0) { +return NULL; /* out of memory error */ +} return (*env)->NewObjectArray(env, (jsize)len, jString_class, NULL); } jstring tcn_new_string(JNIEnv *env, const char *str) { -if (!str) +if (!str) { return NULL; -else +} else { +if ((*env)->EnsureLocalCapacity(env, 1) < 0) { +return NULL; /* out of memory error */ +} return (*env)->NewStringUTF(env, str); +} } char *tcn_get_string(JNIEnv *env, jstring jstr) - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 69068] ReadListener#onError not called on read exception during async processing
https://bz.apache.org/bugzilla/show_bug.cgi?id=69068 Mark Thomas changed: What|Removed |Added Resolution|--- |FIXED Status|NEW |RESOLVED --- Comment #2 from Mark Thomas --- All good. Fixed in: - 11.0.x for 11.0.0-M21 onwards - 10.1.x for 10.1.25 onwards - 9.0.x for 9.0.90 onwards -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
(tomcat) branch 9.0.x updated: Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2
This is an automated email from the ASF dual-hosted git repository. markt 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 9b205ce9d9 Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2 9b205ce9d9 is described below commit 9b205ce9d968972fa9f6dd3848307d662dcc18c8 Author: Mark Thomas AuthorDate: Sun Jun 2 15:22:54 2024 +0100 Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2 Test case provided by hypnoce --- .../apache/coyote/http2/LocalStrings.properties| 1 + java/org/apache/coyote/http2/Stream.java | 23 java/org/apache/coyote/http2/StreamProcessor.java | 20 +++ test/org/apache/coyote/http2/Http2TestBase.java| 2 +- .../apache/coyote/http2/TestAsyncReadListener.java | 145 + webapps/docs/changelog.xml | 8 ++ 6 files changed, 198 insertions(+), 1 deletion(-) diff --git a/java/org/apache/coyote/http2/LocalStrings.properties b/java/org/apache/coyote/http2/LocalStrings.properties index 137e3346db..891ba7ad81 100644 --- a/java/org/apache/coyote/http2/LocalStrings.properties +++ b/java/org/apache/coyote/http2/LocalStrings.properties @@ -121,6 +121,7 @@ streamProcessor.error.connection=Connection [{0}], Stream [{1}], An error occurr streamProcessor.error.stream=Connection [{0}], Stream [{1}], An error occurred during processing that was fatal to the stream streamProcessor.flushBufferedWrite.entry=Connection [{0}], Stream [{1}], Flushing buffered writes streamProcessor.service.error=Error during request processing +streamProcessor.streamReadTimeout=Stream read timeout streamStateMachine.debug.change=Connection [{0}], Stream [{1}], State changed from [{2}] to [{3}] streamStateMachine.invalidFrame=Connection [{0}], Stream [{1}], State [{2}], Frame type [{3}] diff --git a/java/org/apache/coyote/http2/Stream.java b/java/org/apache/coyote/http2/Stream.java index a357d34cf7..9d13db7c72 100644 --- a/java/org/apache/coyote/http2/Stream.java +++ b/java/org/apache/coyote/http2/Stream.java @@ -1160,6 +1160,8 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { abstract boolean isRequestBodyFullyRead(); abstract void insertReplayedBody(ByteChunk body); + +protected abstract boolean timeoutRead(long now); } @@ -1186,6 +1188,8 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { // 'write mode'. private volatile ByteBuffer inBuffer; private volatile boolean readInterest; +// If readInterest is true, data must be available to read no later than this time. +private volatile long readTimeoutExpiry; private volatile boolean closed; private boolean resetReceived; @@ -1285,6 +1289,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { if (!isRequestBodyFullyRead()) { readInterest = true; +long readTimeout = handler.getProtocol().getStreamReadTimeout(); +if (readTimeout > 0) { +readTimeoutExpiry = System.currentTimeMillis() + handler.getProtocol().getStreamReadTimeout(); +} else { +readTimeoutExpiry = Long.MAX_VALUE; +} } return false; @@ -1436,6 +1446,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { } } } + + +@Override +protected boolean timeoutRead(long now) { +return readInterest && now > readTimeoutExpiry; +} } @@ -1497,5 +1513,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { void insertReplayedBody(ByteChunk body) { // NO-OP } + + +@Override +protected boolean timeoutRead(long now) { +// Reading from a saved request. Will never time out. +return false; +} } } diff --git a/java/org/apache/coyote/http2/StreamProcessor.java b/java/org/apache/coyote/http2/StreamProcessor.java index 0e99606f57..872cc75687 100644 --- a/java/org/apache/coyote/http2/StreamProcessor.java +++ b/java/org/apache/coyote/http2/StreamProcessor.java @@ -18,6 +18,7 @@ package org.apache.coyote.http2; import java.io.File; import java.io.IOException; +import java.net.SocketTimeoutException; import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; @@ -25,6 +26,7 @@ import java.util.Set; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletResponse; import org.apache.coyote.AbstractProcessor; @@ -554,4 +556,22 @@ class StreamProcessor extends AbstractProcessor {
(tomcat) branch 10.1.x updated: Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2
This is an automated email from the ASF dual-hosted git repository. markt 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 382ae1f1dc Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2 382ae1f1dc is described below commit 382ae1f1dc25f30d1991ebd1adf2cfc9b71ba570 Author: Mark Thomas AuthorDate: Sun Jun 2 15:22:54 2024 +0100 Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2 Test case provided by hypnoce --- .../apache/coyote/http2/LocalStrings.properties| 1 + java/org/apache/coyote/http2/Stream.java | 23 java/org/apache/coyote/http2/StreamProcessor.java | 20 +++ test/org/apache/coyote/http2/Http2TestBase.java| 2 +- .../apache/coyote/http2/TestAsyncReadListener.java | 145 + webapps/docs/changelog.xml | 4 + 6 files changed, 194 insertions(+), 1 deletion(-) diff --git a/java/org/apache/coyote/http2/LocalStrings.properties b/java/org/apache/coyote/http2/LocalStrings.properties index 137e3346db..891ba7ad81 100644 --- a/java/org/apache/coyote/http2/LocalStrings.properties +++ b/java/org/apache/coyote/http2/LocalStrings.properties @@ -121,6 +121,7 @@ streamProcessor.error.connection=Connection [{0}], Stream [{1}], An error occurr streamProcessor.error.stream=Connection [{0}], Stream [{1}], An error occurred during processing that was fatal to the stream streamProcessor.flushBufferedWrite.entry=Connection [{0}], Stream [{1}], Flushing buffered writes streamProcessor.service.error=Error during request processing +streamProcessor.streamReadTimeout=Stream read timeout streamStateMachine.debug.change=Connection [{0}], Stream [{1}], State changed from [{2}] to [{3}] streamStateMachine.invalidFrame=Connection [{0}], Stream [{1}], State [{2}], Frame type [{3}] diff --git a/java/org/apache/coyote/http2/Stream.java b/java/org/apache/coyote/http2/Stream.java index 096cc52c30..062221d9a4 100644 --- a/java/org/apache/coyote/http2/Stream.java +++ b/java/org/apache/coyote/http2/Stream.java @@ -1162,6 +1162,8 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { abstract boolean isRequestBodyFullyRead(); abstract void insertReplayedBody(ByteChunk body); + +protected abstract boolean timeoutRead(long now); } @@ -1188,6 +1190,8 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { // 'write mode'. private volatile ByteBuffer inBuffer; private volatile boolean readInterest; +// If readInterest is true, data must be available to read no later than this time. +private volatile long readTimeoutExpiry; private volatile boolean closed; private boolean resetReceived; @@ -1287,6 +1291,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { if (!isRequestBodyFullyRead()) { readInterest = true; +long readTimeout = handler.getProtocol().getStreamReadTimeout(); +if (readTimeout > 0) { +readTimeoutExpiry = System.currentTimeMillis() + handler.getProtocol().getStreamReadTimeout(); +} else { +readTimeoutExpiry = Long.MAX_VALUE; +} } return false; @@ -1438,6 +1448,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { } } } + + +@Override +protected boolean timeoutRead(long now) { +return readInterest && now > readTimeoutExpiry; +} } @@ -1499,5 +1515,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { void insertReplayedBody(ByteChunk body) { // NO-OP } + + +@Override +protected boolean timeoutRead(long now) { +// Reading from a saved request. Will never time out. +return false; +} } } diff --git a/java/org/apache/coyote/http2/StreamProcessor.java b/java/org/apache/coyote/http2/StreamProcessor.java index 43865c1ea4..4e5645736e 100644 --- a/java/org/apache/coyote/http2/StreamProcessor.java +++ b/java/org/apache/coyote/http2/StreamProcessor.java @@ -18,6 +18,7 @@ package org.apache.coyote.http2; import java.io.File; import java.io.IOException; +import java.net.SocketTimeoutException; import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; @@ -25,6 +26,7 @@ import java.util.Set; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletConnection; import jakarta.servlet.http.HttpServletResponse; @@ -553,4 +555,22 @@ class StreamProcessor extends AbstractProcessor {
(tomcat) branch main updated: Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2
This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git The following commit(s) were added to refs/heads/main by this push: new 8010d91672 Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2 8010d91672 is described below commit 8010d91672bc8038f34b51339a6e3f5f18d7c316 Author: Mark Thomas AuthorDate: Sun Jun 2 15:22:54 2024 +0100 Fix BZ 69068 - trigger read timeouts for async reads on HTTP/2 Test case provided by hypnoce --- .../apache/coyote/http2/LocalStrings.properties| 1 + java/org/apache/coyote/http2/Stream.java | 23 java/org/apache/coyote/http2/StreamProcessor.java | 20 +++ test/org/apache/coyote/http2/Http2TestBase.java| 2 +- .../apache/coyote/http2/TestAsyncReadListener.java | 145 + webapps/docs/changelog.xml | 4 + 6 files changed, 194 insertions(+), 1 deletion(-) diff --git a/java/org/apache/coyote/http2/LocalStrings.properties b/java/org/apache/coyote/http2/LocalStrings.properties index 5f6cadde11..68baa3d265 100644 --- a/java/org/apache/coyote/http2/LocalStrings.properties +++ b/java/org/apache/coyote/http2/LocalStrings.properties @@ -121,6 +121,7 @@ streamProcessor.error.connection=Connection [{0}], Stream [{1}], An error occurr streamProcessor.error.stream=Connection [{0}], Stream [{1}], An error occurred during processing that was fatal to the stream streamProcessor.flushBufferedWrite.entry=Connection [{0}], Stream [{1}], Flushing buffered writes streamProcessor.service.error=Error during request processing +streamProcessor.streamReadTimeout=Stream read timeout streamStateMachine.debug.change=Connection [{0}], Stream [{1}], State changed from [{2}] to [{3}] streamStateMachine.invalidFrame=Connection [{0}], Stream [{1}], State [{2}], Frame type [{3}] diff --git a/java/org/apache/coyote/http2/Stream.java b/java/org/apache/coyote/http2/Stream.java index a0a5f1f7f9..0151414589 100644 --- a/java/org/apache/coyote/http2/Stream.java +++ b/java/org/apache/coyote/http2/Stream.java @@ -1075,6 +1075,8 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { abstract boolean isRequestBodyFullyRead(); abstract void insertReplayedBody(ByteChunk body); + +protected abstract boolean timeoutRead(long now); } @@ -1101,6 +1103,8 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { // 'write mode'. private volatile ByteBuffer inBuffer; private volatile boolean readInterest; +// If readInterest is true, data must be available to read no later than this time. +private volatile long readTimeoutExpiry; private volatile boolean closed; private boolean resetReceived; @@ -1199,6 +1203,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { if (!isRequestBodyFullyRead()) { readInterest = true; +long readTimeout = handler.getProtocol().getStreamReadTimeout(); +if (readTimeout > 0) { +readTimeoutExpiry = System.currentTimeMillis() + handler.getProtocol().getStreamReadTimeout(); +} else { +readTimeoutExpiry = Long.MAX_VALUE; +} } return false; @@ -1350,6 +1360,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { } } } + + +@Override +protected boolean timeoutRead(long now) { +return readInterest && now > readTimeoutExpiry; +} } @@ -1411,5 +1427,12 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { void insertReplayedBody(ByteChunk body) { // NO-OP } + + +@Override +protected boolean timeoutRead(long now) { +// Reading from a saved request. Will never time out. +return false; +} } } diff --git a/java/org/apache/coyote/http2/StreamProcessor.java b/java/org/apache/coyote/http2/StreamProcessor.java index ab01e7ae7d..fdc8c4b160 100644 --- a/java/org/apache/coyote/http2/StreamProcessor.java +++ b/java/org/apache/coyote/http2/StreamProcessor.java @@ -18,6 +18,7 @@ package org.apache.coyote.http2; import java.io.File; import java.io.IOException; +import java.net.SocketTimeoutException; import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; @@ -25,6 +26,7 @@ import java.util.Set; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletConnection; import jakarta.servlet.http.HttpServletResponse; @@ -543,4 +545,22 @@ class StreamProcessor extends AbstractProcessor {
Bug report for Tomcat Connectors [2024/06/02]
+---+ | Bugzilla Bug ID | | +-+ | | Status: UNC=Unconfirmed NEW=New ASS=Assigned| | | OPN=ReopenedVER=Verified(Skipped Closed/Resolved) | | | +-+ | | | Severity: BLK=Blocker CRI=Critical REG=Regression MAJ=Major | | | | MIN=Minor NOR=NormalENH=Enhancement TRV=Trivial | | | | +-+ | | | | Date Posted | | | | | +--+ | | | | | Description | | | | | | | |46767|New|Enh|2009-02-25|mod_jk to send DECLINED in case no fail-over tomca| |47327|New|Enh|2009-06-07|Return tomcat authenticated user back to mod_jk (A| |47750|New|Maj|2009-08-27|ISAPI: Loss of worker settings when changing via j| |48830|New|Nor|2010-03-01|IIS shutdown blocked in endpoint service when serv| |49822|New|Enh|2010-08-25|Add hash lb worker method | |49903|New|Enh|2010-09-09|Make workers file reloadable | |52483|New|Enh|2012-01-18|Print JkOptions's options in log file and jkstatus| |54621|New|Enh|2013-02-28|[PATCH] custom mod_jk availability checks | |56489|New|Enh|2014-05-05|Include a directory for configuration files | |56576|New|Enh|2014-05-29|Websocket support | |57402|New|Enh|2014-12-30|Provide correlation ID between mod_jk log and acce| |57403|New|Enh|2014-12-30|Persist configuration changes made via status work| |57407|New|Enh|2014-12-31|Make session_cookie, session_path and session_cook| |57790|New|Enh|2015-04-03|Check worker names for typos | |61476|New|Enh|2017-09-01|Allow reset of an individual worker stat value| |61621|New|Enh|2017-10-15|Content-Type is forced to lowercase when it goes t| |62093|New|Enh|2018-02-09|Allow use_server_errors to apply to specific statu| |63808|Inf|Enh|2019-10-05|the fact that JkMount makes other directives ineff| |64775|Inf|Nor|2020-09-28|mod_jk is sending both Content-Length and Transfer| |65488|Inf|Nor|2021-08-08|Destroy method is not being called during Failover| |68677|New|Enh|2024-02-26|no support for enviroment variables/request attrib| |68720|New|Nor|2024-03-06|Troubleshooting Tomcat: Addressing Compression Iss| +-+---+---+--+--+ | Total 22 bugs | +---+ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Bug report for Tomcat Native [2024/06/02]
+---+ | Bugzilla Bug ID | | +-+ | | Status: UNC=Unconfirmed NEW=New ASS=Assigned| | | OPN=ReopenedVER=Verified(Skipped Closed/Resolved) | | | +-+ | | | Severity: BLK=Blocker CRI=Critical REG=Regression MAJ=Major | | | | MIN=Minor NOR=NormalENH=Enhancement TRV=Trivial | | | | +-+ | | | | Date Posted | | | | | +--+ | | | | | Description | | | | | | | |62911|New|Enh|2018-11-15|Add support for proxying ocsp requests via ProxyH| |64826|New|Maj|2020-10-19|libtcnative prompts for private key password in so| |64862|New|Enh|2020-10-30|Improve LibreSSL support | |65344|New|Enh|2021-05-31|OpenSSL configuration | |7|New|Enh|2023-06-23|Take care of OpenSSL deprecated code | |67609|New|Nor|2023-10-05|Incomplete OpenSSL error handling/reporting | |67683|New|Nor|2023-10-11|C source code is not compatible with OpenSSL 1.0.2| |68910|New|Enh|2024-04-17|Improve LibreSSL version check in tcnative.m4 | +-+---+---+--+--+ | Total8 bugs | +---+ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Bug report for Tomcat 9 [2024/06/02]
+---+ | Bugzilla Bug ID | | +-+ | | Status: UNC=Unconfirmed NEW=New ASS=Assigned| | | OPN=ReopenedVER=Verified(Skipped Closed/Resolved) | | | +-+ | | | Severity: BLK=Blocker CRI=Critical REG=Regression MAJ=Major | | | | MIN=Minor NOR=NormalENH=Enhancement TRV=Trivial | | | | +-+ | | | | Date Posted | | | | | +--+ | | | | | Description | | | | | | | |53602|Ver|Enh|2012-07-25|Support for HTTP status code 451 | |57505|New|Enh|2015-01-27|Add integration tests for JspC| |58530|New|Enh|2015-10-23|Proposal for new Manager HTML GUI | |58548|Inf|Enh|2015-10-26|support certifcate transparency | |58859|New|Enh|2016-01-14|Allow to limit charsets / encodings supported by T| |59750|New|Enh|2016-06-24|Amend "authenticate" method with context by means | |61971|New|Enh|2018-01-06|documentation for using tomcat with systemd | |62048|New|Enh|2018-01-25|Missing logout function in Manager and Host-Manage| |62072|New|Enh|2018-02-01|Add support for request compression | |62405|New|Enh|2018-05-23|Add Rereadable Request Filter | |62488|New|Enh|2018-06-25|Obtain dependencies from Maven Central where possi| |62611|Inf|Enh|2018-08-09|Compress log files after rotation | |62773|New|Enh|2018-09-28|Change DeltaManager to handle session deserializat| |62814|New|Enh|2018-10-10|Use readable names for cluster channel/map options| |62843|New|Enh|2018-10-22|Tomcat Russian localization | |62964|Inf|Enh|2018-11-29|Add RFC7807 conformant Problem Details for HTTP st| |63023|New|Enh|2018-12-20|Provide a way to load SecurityProviders into the s| |63049|New|Enh|2018-12-31|Add support in system properties override from com| |63237|New|Enh|2019-03-06|Consider processing mbeans-descriptors.xml at comp| |63389|New|Enh|2019-04-27|Enable Servlet Warmup for Containerization| |63493|New|Enh|2019-06-10|enhancement - add JMX counters to monitor authenti| |63505|New|Enh|2019-06-14|enhancement - support of stored procedures for Dat| |63545|New|Enh|2019-07-06|enhancement - add a new pattern attribute for logg| |63943|Opn|Enh|2019-11-20|Add possibility to overwrite remote port with info| |63983|Ver|Cri|2019-12-03|Jasper builds-up open files until garbage collecti| |64230|New|Enh|2020-03-15|Allow to configure session manager to skip expirin| |64395|New|Enh|2020-04-30|Windows Installer should offer an option to select| |65208|New|Enh|2021-03-29|Multi-threaded loading of servlets| |65302|New|Enh|2021-05-12|Add support for setting com.sun.jndi.ldap.tls.cbty| |65778|Opn|Enh|2022-01-01|Don't create URL from string | |65779|Inf|Enh|2022-01-01|Introduce CATALINA_BASE_DATA | |66592|Opn|Enh|2023-05-04|Support for HTTPS proxy in websocket client | |66631|New|Enh|2023-06-07|Consider moving module-info.class to META-INF/vers| |66647|New|Enh|2023-06-14|Analyze usefulness and consider deprecation of cer| |66654|New|Enh|2023-06-16|Setting displayname while using service.bat to ins| |67080|Ver|Nor|2023-08-29|ImplicitObjectELResolverImpl.getValue() is slow | |68546|Opn|Nor|2024-01-26|Performance optimization in PageContextImpl.getELC| |68596|New|Enh|2024-02-07|Remaining overhead in javax.el.CompositeELResolver| |68876|New|Enh|2024-04-09|serverStartup.pdf missing sources | |68932|Inf|Maj|2024-04-22|Occasional 404 or 500 errors | |69016|Inf|Nor|2024-05-16|HttpURLConnection getOutputStream createCapacityEx| |69068|New|Nor|2024-05-29|ReadListener#onError not called on read exception | +-+---+---+--+--+ | Total 42 bugs | +---+ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Bug report for Taglibs [2024/06/02]
+---+ | Bugzilla Bug ID | | +-+ | | Status: UNC=Unconfirmed NEW=New ASS=Assigned| | | OPN=ReopenedVER=Verified(Skipped Closed/Resolved) | | | +-+ | | | Severity: BLK=Blocker CRI=Critical REG=Regression MAJ=Major | | | | MIN=Minor NOR=NormalENH=Enhancement TRV=Trivial | | | | +-+ | | | | Date Posted | | | | | +--+ | | | | | Description | | | | | | | |38193|Ass|Enh|2006-01-09|[RDC] BuiltIn Grammar support for Field | |38600|Ass|Enh|2006-02-10|[RDC] Enable RDCs to be used in X+V markup (X+RDC)| |42413|New|Enh|2007-05-14|[PATCH] Log Taglib enhancements | |46052|New|Nor|2008-10-21|SetLocaleSupport is slow to initialize when many l| |48333|New|Enh|2009-12-02|TLD generator | |57548|New|Min|2015-02-08|Auto-generate the value for org.apache.taglibs.sta| |57684|New|Min|2015-03-10|Version info should be taken from project version | |59359|New|Enh|2016-04-20|(Task) Extend validity period for signing KEY - be| |59668|New|Nor|2016-06-06|x:forEach retains the incorrect scope when used in| |61875|New|Nor|2017-12-08|Investigate whether Xalan can be removed | |64649|New|Nor|2020-08-06|XSLT transformation - document('') doesn't return | |65491|New|Nor|2021-08-09|Behavior differences with c:import when flushing o| +-+---+---+--+--+ | Total 12 bugs | +---+ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Bug report for Tomcat Modules [2024/06/02]
+---+ | Bugzilla Bug ID | | +-+ | | Status: UNC=Unconfirmed NEW=New ASS=Assigned| | | OPN=ReopenedVER=Verified(Skipped Closed/Resolved) | | | +-+ | | | Severity: BLK=Blocker CRI=Critical REG=Regression MAJ=Major | | | | MIN=Minor NOR=NormalENH=Enhancement TRV=Trivial | | | | +-+ | | | | Date Posted | | | | | +--+ | | | | | Description | | | | | | | |50571|Inf|Nor|2011-01-11|Tomcat 7 JDBC connection pool exception enhancemen| |51595|Inf|Nor|2011-08-01|org.apache.tomcat.jdbc.pool.jmx.ConnectionPool sho| |51879|Inf|Enh|2011-09-22|Improve access to Native Connection Methods | |52024|Inf|Enh|2011-10-13|Custom interceptor to support automatic failover o| |53199|Inf|Enh|2012-05-07|Refactor ConnectionPool to use ScheduledExecutorSe| |54437|New|Enh|2013-01-16|Update PoolProperties javadoc for ConnectState int| |54929|Inf|Nor|2013-05-05|jdbc-pool cannot be used with Java 1.5, "java.lang| |55078|New|Nor|2013-06-07|Configuring a DataSource Resource with dataSourceJ| |55662|New|Enh|2013-10-17|Add a way to set an instance of java.sql.Driver di| |56046|New|Enh|2014-01-21|org.apache.tomcat.jdbc.pool.XADataSource InitSQL p| |56088|New|Maj|2014-01-29|AbstractQueryReport$StatementProxy throws exceptio| |56310|Inf|Maj|2014-03-25|PooledConnection and XAConnection not handled corr| |56586|New|Nor|2014-06-02|initSQL should be committed if defaultAutoCommit =| |56775|New|Nor|2014-07-28|PoolCleanerTime schedule issue| |56779|New|Nor|2014-07-28|Allow multiple connection initialization statement| |56790|New|Nor|2014-07-29|Resizing pool.maxActive to a higher value at runti| |56798|New|Nor|2014-07-31|Idle eviction strategy could perform better (and i| |56804|New|Nor|2014-08-02|Use a default validationQueryTimeout other than "f| |56805|New|Nor|2014-08-02|datasource.getConnection() may be unnecessarily bl| |56837|New|Nor|2014-08-11|if validationQuery have error with timeBetweenEvic| |56970|New|Nor|2014-09-11|MaxActive vs. MaxTotal for commons-dbcp and tomcat| |57460|New|Nor|2015-01-19|[DB2]Connection broken after few hours but not rem| |57729|New|Enh|2015-03-20|Add QueryExecutionReportInterceptor to log query e| |58489|Opn|Maj|2015-10-08|QueryStatsComparator throws IllegalArgumentExcepti| |59077|New|Nor|2016-02-26|DataSourceFactory creates a neutered data source | |59569|New|Nor|2016-05-18|isWrapperFor/unwrap implementations incorrect | |59879|New|Nor|2016-07-18|StatementCache interceptor returns ResultSet objec| |60195|New|Nor|2016-10-02|No javadoc in Maven Central | |60522|New|Nor|2016-12-27|An option for setting if the transaction should be| |60524|Inf|Nor|2016-12-28|NPE in SlowQueryReport in tomcat-jdbc-7.0.68 | |60645|New|Nor|2017-01-25|StatementFinalizer is not thread-safe | |61032|New|Nor|2017-04-24|min pool size is not being respected | |61103|New|Nor|2017-05-18|StatementCache potentially caching non-functional | |61302|New|Enh|2017-07-15|Refactoring of DataSourceProxy| |61303|New|Enh|2017-07-15|Refactoring of ConnectionPool | |62432|New|Nor|2018-06-06|Memory Leak in Statement Finalizer? | |62598|New|Enh|2018-08-04|support pool with multiple JDBC data sources | |62910|Inf|Nor|2018-11-15|tomcat-jdbc global pool transaction problem | |63612|Inf|Cri|2019-07-26|PooledConnection#connectUsingDriver, Thread.curren| |63705|New|Nor|2019-08-29|The tomcat pool doesn't register all connection th| |64083|New|Nor|2020-01-17|JDBC pool keeps closed connection as available| |64107|New|Maj|2020-01-30|PreparedStatements correctly closed are not return| |64231|New|Nor|2020-03-16|Tomcat jdbc pool behaviour| |64809|New|Nor|2020-10-13|Connection properties not reset to defaults when C| |65347|New|Nor|2021-06-02|The equals method from statements generated by the| |65929|New|Nor|2022-03-03|Connection is not released on Connection.abort() c| |66502|New|Enh|2023-03-01|tomcat-jdbc ConnectionPool.returnConnection() acce| |68295|New|Nor|2023-12-05|Connection has already been closed - Tomcat connec| |68436|New|Nor|2024-01-02|Hide "Not loading a JDBC driver as driverClassName| +-+---+---+--+--+ | Total 49 bugs |
Bug report for Tomcat 10 [2024/06/02]
+---+ | Bugzilla Bug ID | | +-+ | | Status: UNC=Unconfirmed NEW=New ASS=Assigned| | | OPN=ReopenedVER=Verified(Skipped Closed/Resolved) | | | +-+ | | | Severity: BLK=Blocker CRI=Critical REG=Regression MAJ=Major | | | | MIN=Minor NOR=NormalENH=Enhancement TRV=Trivial | | | | +-+ | | | | Date Posted | | | | | +--+ | | | | | Description | | | | | | | |64353|New|Enh|2020-04-15|Add support for accessing server certificate from | |64549|New|Enh|2020-06-23|create a project module to launch Tomcat in OSGi | |64550|New|Enh|2020-06-23|create a project module to launch Tomcat in JPMS | |65124|New|Enh|2021-02-03|Inefficient generated JSP code| |65267|New|Enh|2021-04-27|Implement mod_headers like filter | |65391|New|Enh|2021-06-19|Additional user attributes queried by (some) realm| |65635|New|Enh|2021-10-15|Methods to return auth errors | |66125|New|Enh|2022-06-16|JMProxy - enhance security restrictions | |66191|New|Enh|2022-08-01|compile taglibs that are not (yet) included in jsp| |66406|New|Enh|2023-01-02|JULI ClassLoaderLogManager creates multiple logger| |66613|Ver|Enh|2023-05-23|Developing wiki page: Unclear reference to "servic| |66616|Ver|Nor|2023-05-26|French: Misleading HTTP 401 error description ("La| |68480|New|Enh|2024-01-15|Add cipher alias for TLSv1.3 | |68901|New|Enh|2024-04-16|Coyote is hardcoded to drop connections on 400|408| |68947|New|Enh|2024-04-25|`tomcat-embed-core` `10.1.23` requires Java 11 but| +-+---+---+--+--+ | Total 15 bugs | +---+ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Bug report for Tomcat 8 [2024/06/02]
+---+ | Bugzilla Bug ID | | +-+ | | Status: UNC=Unconfirmed NEW=New ASS=Assigned| | | OPN=ReopenedVER=Verified(Skipped Closed/Resolved) | | | +-+ | | | Severity: BLK=Blocker CRI=Critical REG=Regression MAJ=Major | | | | MIN=Minor NOR=NormalENH=Enhancement TRV=Trivial | | | | +-+ | | | | Date Posted | | | | | +--+ | | | | | Description | | | | | | | |55243|New|Enh|2013-07-11|Add special search string for nested roles| |55470|New|Enh|2013-08-23|Help users for ClassNotFoundExceptions during star| |55675|New|Enh|2013-10-18|Checking and handling invalid configuration option| |55788|New|Enh|2013-11-16|TagPlugins should key on tag QName rather than imp| |56148|New|Enh|2014-02-17|support (multiple) ocsp stapling | |56300|New|Enh|2014-03-22|[Tribes] No useful examples, lack of documentation| |56438|New|Enh|2014-04-21|If jar scan does not find context config or TLD co| |56546|New|Enh|2014-05-19|Improve thread trace logging in WebappClassLoader.| |56713|New|Enh|2014-07-12|Limit time that incoming request waits while webap| |57129|Opn|Enh|2014-10-22|Regression. Load WEB-INF/lib jarfiles in alphabeti| |57367|New|Enh|2014-12-18|If JAR scan experiences a stack overflow, give the| |57421|New|Enh|2015-01-07|Farming default directories | |57486|New|Enh|2015-01-23|Improve reuse of ProtectedFunctionMapper instances| |57701|New|Enh|2015-03-13|Implement "[Redeploy]" button for a web applicatio| |57827|New|Enh|2015-04-17|Enable adding/removing of members via jmx in a sta| |57830|New|Enh|2015-04-18|Add support for ProxyProtocol | |57872|New|Enh|2015-04-29|Do not auto-switch session cookie to version=1 due| |58052|Opn|Enh|2015-06-19|RewriteValve: Implement additional RewriteRule dir| |58935|Opn|Enh|2016-01-29|Re-deploy from war without deleting context | |60849|New|Enh|2017-03-13|Tomcat NIO Connector not able to handle SSL renego| |61877|New|Enh|2017-12-08|use web.xml from CATALINA_HOME by default | |62214|New|Enh|2018-03-22|The "userSubtree=true" and "roleSubtree=true" in J| |63080|New|Enh|2019-01-16|Support rfc7239 Forwarded header | |63167|New|Enh|2019-02-12|Network Requirements To Resolve No Members Active | |63195|Inf|Enh|2019-02-21|Add easy way to test RemoteIpValve works properly | |65809|New|Enh|2022-01-19|Reduce memory footprint for long-lasting WebSocket| +-+---+---+--+--+ | Total 26 bugs | +---+ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org