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 9cc2b05cb9 Fix a regression in the previous release when logging the
query string
9cc2b05cb9 is described below
commit 9cc2b05cb9862b541951ca244e1b41fb1ed6057e
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Apr 1 14:30:31 2026 +0100
Fix a regression in the previous release when logging the query string
"?-"could appear in the access log rather than "?" when the query string
was present but empty
---
.../apache/catalina/valves/AbstractAccessLogValve.java | 15 ++++++++++++---
test/org/apache/catalina/valves/TestAccessLogValve.java | 12 ++++++++++--
webapps/docs/changelog.xml | 5 +++++
3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/java/org/apache/catalina/valves/AbstractAccessLogValve.java
b/java/org/apache/catalina/valves/AbstractAccessLogValve.java
index e5f14f0424..55db894ec7 100644
--- a/java/org/apache/catalina/valves/AbstractAccessLogValve.java
+++ b/java/org/apache/catalina/valves/AbstractAccessLogValve.java
@@ -1132,9 +1132,13 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
buf.append(request.getMethod());
buf.append(' ');
escapeAndAppend(request.getRequestURI(), buf);
- if (request.getQueryString() != null) {
+ String query = request.getQueryString();
+ if (query != null) {
buf.append('?');
- escapeAndAppend(request.getQueryString(), buf);
+ // Don't want to write "-" if the query string is empty
+ if (!query.isEmpty()) {
+ escapeAndAppend(query, buf);
+ }
}
buf.append(' ');
buf.append(request.getProtocol());
@@ -1331,7 +1335,12 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
if (query != null) {
buf.append('?');
- escapeAndAppend(query, buf);
+ // Don't want to write "-" if the query string is empty
+ if (!query.isEmpty()) {
+ escapeAndAppend(query, buf);
+ }
+ } else {
+ buf.append('-');
}
}
}
diff --git a/test/org/apache/catalina/valves/TestAccessLogValve.java
b/test/org/apache/catalina/valves/TestAccessLogValve.java
index ded7d437c2..a244bd5850 100644
--- a/test/org/apache/catalina/valves/TestAccessLogValve.java
+++ b/test/org/apache/catalina/valves/TestAccessLogValve.java
@@ -114,10 +114,18 @@ public class TestAccessLogValve extends TomcatBaseTest {
parameterSets.add(new Object[] {"pct-m", JSON_TYPE, "/", "%m",
"\\{\"method\":\"GET\"\\}"});
parameterSets.add(new Object[] {"pct-p", TEXT_TYPE, "/", "%p",
"\\d+"});
parameterSets.add(new Object[] {"pct-p", JSON_TYPE, "/", "%p",
"\\{\"port\":\"\\d+\"\\}"});
+ parameterSets.add(new Object[] {"pct-q", TEXT_TYPE, "/", "%q", "-"});
+ parameterSets.add(new Object[] {"pct-q", JSON_TYPE, "/", "%q",
"\\{\"query\":\"-\"\\}"});
+ parameterSets.add(new Object[] {"pct-q", TEXT_TYPE, "/?", "%q",
"\\?"});
+ parameterSets.add(new Object[] {"pct-q", JSON_TYPE, "/?", "%q",
"\\{\"query\":\"\\?\"\\}"});
parameterSets.add(new Object[] {"pct-q", TEXT_TYPE, "/?data=123",
"%q", "\\?data=123"});
parameterSets.add(new Object[] {"pct-q", JSON_TYPE, "/?data=123",
"%q", "\\{\"query\":\"\\?data=123\"\\}"});
parameterSets.add(new Object[] {"pct-r", TEXT_TYPE, "/", "%r", "GET /
HTTP/1.1"});
parameterSets.add(new Object[] {"pct-r", JSON_TYPE, "/", "%r",
"\\{\"request\":\"GET / HTTP/1.1\"\\}"});
+ parameterSets.add(new Object[] {"pct-r", TEXT_TYPE, "/?", "%r", "GET
/\\? HTTP/1.1"});
+ parameterSets.add(new Object[] {"pct-r", JSON_TYPE, "/?", "%r",
"\\{\"request\":\"GET /\\? HTTP/1.1\"\\}"});
+ parameterSets.add(new Object[] {"pct-r", TEXT_TYPE, "/?data=123",
"%r", "GET /\\?data=123 HTTP/1.1"});
+ parameterSets.add(new Object[] {"pct-r", JSON_TYPE, "/?data=123",
"%r", "\\{\"request\":\"GET /\\?data=123 HTTP/1.1\"\\}"});
parameterSets.add(new Object[] {"pct-s", TEXT_TYPE, "/", "%s", "200"});
parameterSets.add(new Object[] {"pct-s", JSON_TYPE, "/", "%s",
"\\{\"statusCode\":\"200\"\\}"});
parameterSets.add(new Object[] {"pct-S", TEXT_TYPE, "/", "%S",
"[A-F0-9]{32}"});
@@ -312,9 +320,9 @@ public class TestAccessLogValve extends TomcatBaseTest {
Assert.assertFalse("Access log line empty after " +
(System.currentTimeMillis() - startWait) + " milliseconds", "".equals(result));
boolean matches = Pattern.matches(resultMatch, result);
if (!matches) {
- log.error("Resulting log line '" + result + "' does not match '" +
resultMatch + "'");
+ log.error("Resulting log line '" + result + "' does not match
pattern '" + resultMatch + "'");
}
- Assert.assertTrue("Resulting log line '" + result + "' does not match
'" + resultMatch + "'", matches);
+ Assert.assertTrue("Resulting log line '" + result + "' does not match
pattern '" + resultMatch + "'", matches);
if (JSON_TYPE.equals(type)) {
JSONParser parser = new JSONParser(result);
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 42c21e9fc9..2edd36ece9 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -111,6 +111,11 @@
Refactor generation of the remote user element in the access log to
remove unnecessary code. (markt)
</scode>
+ <fix>
+ Fix a regression in the previous release that meant <code>?-</code>
+ could appear in the access log rather than <code>?</code> when the
query
+ string was present but empty. (markt)
+ </fix>
</changelog>
</subsection>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]