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:33 UTC

[tomcat] branch 9.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 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 e7d4ec3  Fix Response#sendRedirect() if no request context exists.
e7d4ec3 is described below

commit e7d4ec3cd0802da3898273d55f3d0496743153a5
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 0950bcb..1295922 100644
--- a/java/org/apache/catalina/connector/Response.java
+++ b/java/org/apache/catalina/connector/Response.java
@@ -1363,17 +1363,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 c747b30..ef55841 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -112,6 +112,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


Re: [tomcat] branch 9.0.x updated: Fix Response#sendRedirect() if no request context exists.

Posted by Mark Thomas <ma...@apache.org>.
On 08/03/2022 04:32, Konstantin Kolinko wrote:
> вт, 1 мар. 2022 г. в 18:08, <ma...@apache.org>:
>>
>> 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 e7d4ec3  Fix Response#sendRedirect() if no request context exists.
>> e7d4ec3 is described below
>>
>> commit e7d4ec3cd0802da3898273d55f3d0496743153a5
>> 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 0950bcb..1295922 100644
>> --- a/java/org/apache/catalina/connector/Response.java
>> +++ b/java/org/apache/catalina/connector/Response.java
>> @@ -1363,17 +1363,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;
> 
> I think it was meant to be (context != null) above...

Agreed. Good catch. Thanks. No sure how I missed that.

Fixed.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: [tomcat] branch 9.0.x updated: Fix Response#sendRedirect() if no request context exists.

Posted by Konstantin Kolinko <kn...@gmail.com>.
вт, 1 мар. 2022 г. в 18:08, <ma...@apache.org>:
>
> 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 e7d4ec3  Fix Response#sendRedirect() if no request context exists.
> e7d4ec3 is described below
>
> commit e7d4ec3cd0802da3898273d55f3d0496743153a5
> 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 0950bcb..1295922 100644
> --- a/java/org/apache/catalina/connector/Response.java
> +++ b/java/org/apache/catalina/connector/Response.java
> @@ -1363,17 +1363,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;

I think it was meant to be (context != null) above...

>              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 c747b30..ef55841 100644
> --- a/webapps/docs/changelog.xml
> +++ b/webapps/docs/changelog.xml
> @@ -112,6 +112,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
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org