You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2022/03/01 15:08:29 UTC
[tomcat] branch 10.0.x updated: Fix Response#sendRedirect() if no request context exists.
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 10.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.0.x by this push:
new d0d0c00 Fix Response#sendRedirect() if no request context exists.
d0d0c00 is described below
commit d0d0c00688009c7dedf634812fbcf8b3dc1a0b37
Author: Knut Sander <kn...@mgm-sp.com>
AuthorDate: Thu Feb 24 18:40:16 2022 +0100
Fix Response#sendRedirect() if no request context exists.
If no ROOT context is defined, the context may be null in special cases, e.g. RewriteValve may use Response#sendRedirect() without any application context associated.
In this case, the Tomcat behaviors for the context attributes useRelativeRedirects and sendRedirectBody are assumed, but without considering org.apache.catalina.STRICT_SERVLET_COMPLIANCE.
---
java/org/apache/catalina/connector/Response.java | 9 +++++++--
webapps/docs/changelog.xml | 5 +++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/java/org/apache/catalina/connector/Response.java b/java/org/apache/catalina/connector/Response.java
index 652b6b9..f26550f 100644
--- a/java/org/apache/catalina/connector/Response.java
+++ b/java/org/apache/catalina/connector/Response.java
@@ -1324,17 +1324,22 @@ public class Response implements HttpServletResponse {
// Generate a temporary redirect to the specified location
try {
+ Context context = getContext();
+ // If no ROOT context is defined, the context can be null.
+ // In this case, the default Tomcat values are assumed, but without
+ // reference to org.apache.catalina.STRICT_SERVLET_COMPLIANCE.
+ boolean reqHasContext = context == null;
String locationUri;
// Relative redirects require HTTP/1.1
if (getRequest().getCoyoteRequest().getSupportsRelativeRedirects() &&
- getContext().getUseRelativeRedirects()) {
+ (!reqHasContext || context.getUseRelativeRedirects())) {
locationUri = location;
} else {
locationUri = toAbsolute(location);
}
setStatus(status);
setHeader("Location", locationUri);
- if (getContext().getSendRedirectBody()) {
+ if (reqHasContext && context.getSendRedirectBody()) {
PrintWriter writer = getWriter();
writer.print(sm.getString("coyoteResponse.sendRedirect.note",
Escape.htmlElementContent(locationUri)));
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 40caf73..877f47e 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -117,6 +117,11 @@
rewrite valve should set the content type for the response, not the
request. (markt)
</fix>
+ <fix>
+ <pr>479</pr>: Enable the rewrite valve to redirect requests when the
+ original request cannot be mapped to a context. This typically happens
+ when no ROOT context is defined. Pull request by elkman. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org