(tomcat) 02/03: Add showReport attribute in ProxyErrorReportValve.

2026-06-09 Thread dsoumis
This is an automated email from the ASF dual-hosted git repository.

dsoumis pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 7e8466318799573909a03b1e9021a8a5f1a57767
Author: Dimitris Soumis 
AuthorDate: Tue Jun 9 14:08:39 2026 +0300

Add showReport attribute in ProxyErrorReportValve.
---
 .../catalina/valves/ProxyErrorReportValve.java | 27 ---
 .../catalina/valves/TestProxyErrorReportValve.java | 87 ++
 webapps/docs/config/valve.xml  | 12 +++
 3 files changed, 114 insertions(+), 12 deletions(-)

diff --git a/java/org/apache/catalina/valves/ProxyErrorReportValve.java 
b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
index a13acf9ba4..a2c34a36ac 100644
--- a/java/org/apache/catalina/valves/ProxyErrorReportValve.java
+++ b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
@@ -176,8 +176,8 @@ public class ProxyErrorReportValve extends ErrorReportValve 
{
 }
 try {
 stringBuilder.append("requestUri=");
-stringBuilder
-.append(URLEncoder.encode(request.getDecodedRequestURI(), 
request.getConnector().getURIEncoding()));
+stringBuilder.append(
+URLEncoder.encode(request.getDecodedRequestURI(), 
request.getConnector().getURIEncoding()));
 stringBuilder.append("&statusCode=");
 stringBuilder.append(URLEncoder.encode(String.valueOf(statusCode), 
"UTF-8"));
 } catch (UnsupportedEncodingException e) {
@@ -199,19 +199,22 @@ public class ProxyErrorReportValve extends 
ErrorReportValve {
 description = smClient.getString("errorReportValve.noDescription");
 }
 try {
-stringBuilder.append("&statusDescription=");
-stringBuilder.append(URLEncoder.encode(description, "UTF-8"));
 stringBuilder.append("&statusReason=");
 stringBuilder.append(URLEncoder.encode(reason, "UTF-8"));
 
-String message = response.getMessage();
-if (message != null) {
-stringBuilder.append("&message=");
-stringBuilder.append(URLEncoder.encode(message, "UTF-8"));
-}
-if (throwable != null) {
-stringBuilder.append("&throwable=");
-stringBuilder.append(URLEncoder.encode(throwable.toString(), 
"UTF-8"));
+if (isShowReport()) {
+stringBuilder.append("&statusDescription=");
+stringBuilder.append(URLEncoder.encode(description, "UTF-8"));
+
+String message = response.getMessage();
+if (message != null) {
+stringBuilder.append("&message=");
+stringBuilder.append(URLEncoder.encode(message, "UTF-8"));
+}
+if (throwable != null) {
+stringBuilder.append("&throwable=");
+
stringBuilder.append(URLEncoder.encode(throwable.toString(), "UTF-8"));
+}
 }
 } catch (UnsupportedEncodingException e) {
 // Ignore
diff --git a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java 
b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
index ab5201199f..b4dc29ad7a 100644
--- a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
+++ b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
@@ -17,6 +17,9 @@
 package org.apache.catalina.valves;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -248,6 +251,90 @@ public class TestProxyErrorReportValve extends 
TomcatBaseTest {
 }
 
 
+@Test
+public void testRedirectShowReportFalse() throws Exception {
+Tomcat tomcat = getTomcatInstance();
+StandardHost host = (StandardHost) tomcat.getHost();
+host.setErrorReportValveClass(PROXY_VALVE);
+
+Context ctx = getProgrammaticRootContext();
+
+Tomcat.addServlet(ctx, "sendError", new SendErrorServlet(
+HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server broke"));
+ctx.addServletMappingDecoded("/", "sendError");
+
+Tomcat.addServlet(ctx, "errorPage", new ErrorPageServlet());
+ctx.addServletMappingDecoded("/error-page", "errorPage");
+
+tomcat.start();
+
+ProxyErrorReportValve proxyErrorReportValve = null;
+for (Valve valve : host.getPipeline().getValves()) {
+if (valve instanceof ProxyErrorReportValve) {
+proxyErrorReportValve = (ProxyErrorReportValve) valve;
+break;
+}
+}
+Assert.assertNotNull(proxyErrorReportValve);
+proxyErrorReportValve.setUseRedirect(true);
+proxyErrorReportValve.setShowReport(false);
+

(tomcat) 02/03: Add showReport attribute in ProxyErrorReportValve.

2026-06-09 Thread dsoumis
This is an automated email from the ASF dual-hosted git repository.

dsoumis pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit cd2b532ed778d8b541d0f5379755ca0429984537
Author: Dimitris Soumis 
AuthorDate: Tue Jun 9 14:08:39 2026 +0300

Add showReport attribute in ProxyErrorReportValve.
---
 .../catalina/valves/ProxyErrorReportValve.java | 23 +++---
 .../catalina/valves/TestProxyErrorReportValve.java | 87 ++
 webapps/docs/config/valve.xml  | 12 +++
 3 files changed, 112 insertions(+), 10 deletions(-)

diff --git a/java/org/apache/catalina/valves/ProxyErrorReportValve.java 
b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
index 80883f51a7..a813f51c9b 100644
--- a/java/org/apache/catalina/valves/ProxyErrorReportValve.java
+++ b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
@@ -193,19 +193,22 @@ public class ProxyErrorReportValve extends 
ErrorReportValve {
 reason = smClient.getString("errorReportValve.unknownReason");
 description = smClient.getString("errorReportValve.noDescription");
 }
-stringBuilder.append("&statusDescription=");
-stringBuilder.append(URLEncoder.encode(description, 
StandardCharsets.UTF_8));
 stringBuilder.append("&statusReason=");
 stringBuilder.append(URLEncoder.encode(reason, 
StandardCharsets.UTF_8));
 
-String message = response.getMessage();
-if (message != null) {
-stringBuilder.append("&message=");
-stringBuilder.append(URLEncoder.encode(message, 
StandardCharsets.UTF_8));
-}
-if (throwable != null) {
-stringBuilder.append("&throwable=");
-stringBuilder.append(URLEncoder.encode(throwable.toString(), 
StandardCharsets.UTF_8));
+if (isShowReport()) {
+stringBuilder.append("&statusDescription=");
+stringBuilder.append(URLEncoder.encode(description, 
StandardCharsets.UTF_8));
+
+String message = response.getMessage();
+if (message != null) {
+stringBuilder.append("&message=");
+stringBuilder.append(URLEncoder.encode(message, 
StandardCharsets.UTF_8));
+}
+if (throwable != null) {
+stringBuilder.append("&throwable=");
+stringBuilder.append(URLEncoder.encode(throwable.toString(), 
StandardCharsets.UTF_8));
+}
 }
 
 urlString = stringBuilder.toString();
diff --git a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java 
b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
index 36242452a2..458c9109c7 100644
--- a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
+++ b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
@@ -17,6 +17,9 @@
 package org.apache.catalina.valves;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
@@ -248,6 +251,90 @@ public class TestProxyErrorReportValve extends 
TomcatBaseTest {
 }
 
 
+@Test
+public void testRedirectShowReportFalse() throws Exception {
+Tomcat tomcat = getTomcatInstance();
+StandardHost host = (StandardHost) tomcat.getHost();
+host.setErrorReportValveClass(PROXY_VALVE);
+
+Context ctx = getProgrammaticRootContext();
+
+Tomcat.addServlet(ctx, "sendError", new SendErrorServlet(
+HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server broke"));
+ctx.addServletMappingDecoded("/", "sendError");
+
+Tomcat.addServlet(ctx, "errorPage", new ErrorPageServlet());
+ctx.addServletMappingDecoded("/error-page", "errorPage");
+
+tomcat.start();
+
+ProxyErrorReportValve proxyErrorReportValve = null;
+for (Valve valve : host.getPipeline().getValves()) {
+if (valve instanceof ProxyErrorReportValve) {
+proxyErrorReportValve = (ProxyErrorReportValve) valve;
+break;
+}
+}
+Assert.assertNotNull(proxyErrorReportValve);
+proxyErrorReportValve.setUseRedirect(true);
+proxyErrorReportValve.setShowReport(false);
+proxyErrorReportValve.setProperty("errorCode." + 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+"http://localhost:"; + getPort() + "/error-page");
+
+ByteChunk res = new ByteChunk();
+Map> resHead = new HashMap<>();
+int rc = methodUrl("http://localhost:"; + getPort(), res,
+DEFAULT_CLIENT_TIMEOUT_MS, null, resHead, "GET", false);
+
+Assert.assertEquals(HttpServletResponse.SC_FOUND, rc);
+
+List locationHeader = resHead.get("Location");
+Assert.assertNotNull(locationHeader);
+String location = locationHeader.get(0);
+
+

(tomcat) 02/03: Add showReport attribute in ProxyErrorReportValve.

2026-06-09 Thread dsoumis
This is an automated email from the ASF dual-hosted git repository.

dsoumis pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 30229533c3570220b7c46504721826c5a3ab45c2
Author: Dimitris Soumis 
AuthorDate: Tue Jun 9 14:08:39 2026 +0300

Add showReport attribute in ProxyErrorReportValve.
---
 .../catalina/valves/ProxyErrorReportValve.java | 23 +++---
 .../catalina/valves/TestProxyErrorReportValve.java | 87 ++
 webapps/docs/config/valve.xml  | 12 +++
 3 files changed, 112 insertions(+), 10 deletions(-)

diff --git a/java/org/apache/catalina/valves/ProxyErrorReportValve.java 
b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
index 80883f51a7..a813f51c9b 100644
--- a/java/org/apache/catalina/valves/ProxyErrorReportValve.java
+++ b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
@@ -193,19 +193,22 @@ public class ProxyErrorReportValve extends 
ErrorReportValve {
 reason = smClient.getString("errorReportValve.unknownReason");
 description = smClient.getString("errorReportValve.noDescription");
 }
-stringBuilder.append("&statusDescription=");
-stringBuilder.append(URLEncoder.encode(description, 
StandardCharsets.UTF_8));
 stringBuilder.append("&statusReason=");
 stringBuilder.append(URLEncoder.encode(reason, 
StandardCharsets.UTF_8));
 
-String message = response.getMessage();
-if (message != null) {
-stringBuilder.append("&message=");
-stringBuilder.append(URLEncoder.encode(message, 
StandardCharsets.UTF_8));
-}
-if (throwable != null) {
-stringBuilder.append("&throwable=");
-stringBuilder.append(URLEncoder.encode(throwable.toString(), 
StandardCharsets.UTF_8));
+if (isShowReport()) {
+stringBuilder.append("&statusDescription=");
+stringBuilder.append(URLEncoder.encode(description, 
StandardCharsets.UTF_8));
+
+String message = response.getMessage();
+if (message != null) {
+stringBuilder.append("&message=");
+stringBuilder.append(URLEncoder.encode(message, 
StandardCharsets.UTF_8));
+}
+if (throwable != null) {
+stringBuilder.append("&throwable=");
+stringBuilder.append(URLEncoder.encode(throwable.toString(), 
StandardCharsets.UTF_8));
+}
 }
 
 urlString = stringBuilder.toString();
diff --git a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java 
b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
index 0010397eec..8a53b0649f 100644
--- a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
+++ b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
@@ -18,6 +18,9 @@ package org.apache.catalina.valves;
 
 import java.io.IOException;
 import java.io.Serial;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
@@ -249,6 +252,90 @@ public class TestProxyErrorReportValve extends 
TomcatBaseTest {
 }
 
 
+@Test
+public void testRedirectShowReportFalse() throws Exception {
+Tomcat tomcat = getTomcatInstance();
+StandardHost host = (StandardHost) tomcat.getHost();
+host.setErrorReportValveClass(PROXY_VALVE);
+
+Context ctx = getProgrammaticRootContext();
+
+Tomcat.addServlet(ctx, "sendError", new SendErrorServlet(
+HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server broke"));
+ctx.addServletMappingDecoded("/", "sendError");
+
+Tomcat.addServlet(ctx, "errorPage", new ErrorPageServlet());
+ctx.addServletMappingDecoded("/error-page", "errorPage");
+
+tomcat.start();
+
+ProxyErrorReportValve proxyErrorReportValve = null;
+for (Valve valve : host.getPipeline().getValves()) {
+if (valve instanceof ProxyErrorReportValve) {
+proxyErrorReportValve = (ProxyErrorReportValve) valve;
+break;
+}
+}
+Assert.assertNotNull(proxyErrorReportValve);
+proxyErrorReportValve.setUseRedirect(true);
+proxyErrorReportValve.setShowReport(false);
+proxyErrorReportValve.setProperty("errorCode." + 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+"http://localhost:"; + getPort() + "/error-page");
+
+ByteChunk res = new ByteChunk();
+Map> resHead = new HashMap<>();
+int rc = methodUrl("http://localhost:"; + getPort(), res,
+DEFAULT_CLIENT_TIMEOUT_MS, null, resHead, "GET", false);
+
+Assert.assertEquals(HttpServletResponse.SC_FOUND, rc);
+
+List locationHeader = resHead.get("Location");
+Assert.assertNotNull(locationHeader);
+String location = locationHeader.get(0);
+
+

(tomcat) 02/03: Add showReport attribute in ProxyErrorReportValve.

2026-06-09 Thread dsoumis
This is an automated email from the ASF dual-hosted git repository.

dsoumis pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 6ef3a571288476e581cb5cddee8dd1679fdf003f
Author: Dimitris Soumis 
AuthorDate: Tue Jun 9 14:08:39 2026 +0300

Add showReport attribute in ProxyErrorReportValve.
---
 .../catalina/valves/ProxyErrorReportValve.java | 23 +++---
 .../catalina/valves/TestProxyErrorReportValve.java | 87 ++
 webapps/docs/config/valve.xml  | 12 +++
 3 files changed, 112 insertions(+), 10 deletions(-)

diff --git a/java/org/apache/catalina/valves/ProxyErrorReportValve.java 
b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
index 80883f51a7..a813f51c9b 100644
--- a/java/org/apache/catalina/valves/ProxyErrorReportValve.java
+++ b/java/org/apache/catalina/valves/ProxyErrorReportValve.java
@@ -193,19 +193,22 @@ public class ProxyErrorReportValve extends 
ErrorReportValve {
 reason = smClient.getString("errorReportValve.unknownReason");
 description = smClient.getString("errorReportValve.noDescription");
 }
-stringBuilder.append("&statusDescription=");
-stringBuilder.append(URLEncoder.encode(description, 
StandardCharsets.UTF_8));
 stringBuilder.append("&statusReason=");
 stringBuilder.append(URLEncoder.encode(reason, 
StandardCharsets.UTF_8));
 
-String message = response.getMessage();
-if (message != null) {
-stringBuilder.append("&message=");
-stringBuilder.append(URLEncoder.encode(message, 
StandardCharsets.UTF_8));
-}
-if (throwable != null) {
-stringBuilder.append("&throwable=");
-stringBuilder.append(URLEncoder.encode(throwable.toString(), 
StandardCharsets.UTF_8));
+if (isShowReport()) {
+stringBuilder.append("&statusDescription=");
+stringBuilder.append(URLEncoder.encode(description, 
StandardCharsets.UTF_8));
+
+String message = response.getMessage();
+if (message != null) {
+stringBuilder.append("&message=");
+stringBuilder.append(URLEncoder.encode(message, 
StandardCharsets.UTF_8));
+}
+if (throwable != null) {
+stringBuilder.append("&throwable=");
+stringBuilder.append(URLEncoder.encode(throwable.toString(), 
StandardCharsets.UTF_8));
+}
 }
 
 urlString = stringBuilder.toString();
diff --git a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java 
b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
index 0010397eec..ded0896ade 100644
--- a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
+++ b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
@@ -18,6 +18,9 @@ package org.apache.catalina.valves;
 
 import java.io.IOException;
 import java.io.Serial;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
@@ -249,6 +252,90 @@ public class TestProxyErrorReportValve extends 
TomcatBaseTest {
 }
 
 
+@Test
+public void testRedirectShowReportFalse() throws Exception {
+Tomcat tomcat = getTomcatInstance();
+StandardHost host = (StandardHost) tomcat.getHost();
+host.setErrorReportValveClass(PROXY_VALVE);
+
+Context ctx = getProgrammaticRootContext();
+
+Tomcat.addServlet(ctx, "sendError", new SendErrorServlet(
+HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server broke"));
+ctx.addServletMappingDecoded("/", "sendError");
+
+Tomcat.addServlet(ctx, "errorPage", new ErrorPageServlet());
+ctx.addServletMappingDecoded("/error-page", "errorPage");
+
+tomcat.start();
+
+ProxyErrorReportValve proxyErrorReportValve = null;
+for (Valve valve : host.getPipeline().getValves()) {
+if (valve instanceof ProxyErrorReportValve) {
+proxyErrorReportValve = (ProxyErrorReportValve) valve;
+break;
+}
+}
+Assert.assertNotNull(proxyErrorReportValve);
+proxyErrorReportValve.setUseRedirect(true);
+proxyErrorReportValve.setShowReport(false);
+proxyErrorReportValve.setProperty("errorCode." + 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+"http://localhost:"; + getPort() + "/error-page");
+
+ByteChunk res = new ByteChunk();
+Map> resHead = new HashMap<>();
+int rc = methodUrl("http://localhost:"; + getPort(), res,
+DEFAULT_CLIENT_TIMEOUT_MS, null, resHead, "GET", false);
+
+Assert.assertEquals(HttpServletResponse.SC_FOUND, rc);
+
+List locationHeader = resHead.get("Location");
+Assert.assertNotNull(locationHeader);
+String location = locationHeader.getFirst();
+
+