This is an automated email from the ASF dual-hosted git repository.

remm 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 b837469341 Fix edge case
b837469341 is described below

commit b8374693412570e20e9db3fc3ff15a097bf6bfd6
Author: remm <r...@apache.org>
AuthorDate: Wed Dec 11 12:05:34 2024 +0100

    Fix edge case
---
 java/org/apache/catalina/servlets/DefaultServlet.java | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/java/org/apache/catalina/servlets/DefaultServlet.java 
b/java/org/apache/catalina/servlets/DefaultServlet.java
index a8cb7525d0..8572633000 100644
--- a/java/org/apache/catalina/servlets/DefaultServlet.java
+++ b/java/org/apache/catalina/servlets/DefaultServlet.java
@@ -2218,7 +2218,9 @@ public class DefaultServlet extends HttpServlet {
             return true;
         }
         boolean hasAsteriskValue = false;// check existence of special header 
value '*'
+        int headerCount = 0;
         while (headerValues.hasMoreElements() && !conditionSatisfied) {
+            headerCount++;
             String headerValue = headerValues.nextElement();
             if ("*".equals(headerValue)) {
                 hasAsteriskValue = true;
@@ -2237,7 +2239,11 @@ public class DefaultServlet extends HttpServlet {
                 }
             }
         }
-        if (hasAsteriskValue && headerValues.hasMoreElements()) {
+        if (headerValues.hasMoreElements()) {
+            headerCount++;
+        }
+
+        if (hasAsteriskValue && headerCount > 1) {
             // Note that an If-Match header field with a list value containing 
"*" and other values (including other
             // instances of "*") is syntactically invalid (therefore not 
allowed to be generated) and furthermore is
             // unlikely to be interoperable.
@@ -2312,13 +2318,14 @@ public class DefaultServlet extends HttpServlet {
         }
         boolean hasAsteriskValue = false;// check existence of special header 
value '*'
         boolean conditionSatisfied = true;
+        int headerCount = 0;
         while (headerValues.hasMoreElements()) {
-
+            headerCount++;
             String headerValue = headerValues.nextElement();
 
             if (headerValue.equals("*")) {
                 hasAsteriskValue = true;
-                if (headerValues.hasMoreElements()) {
+                if (headerCount > 1 || headerValues.hasMoreElements()) {
                     conditionSatisfied = false;
                     break;
                 } else {
@@ -2358,8 +2365,11 @@ public class DefaultServlet extends HttpServlet {
             }
 
         }
+        if (headerValues.hasMoreElements()) {
+            headerCount++;
+        }
 
-        if (hasAsteriskValue && headerValues.hasMoreElements()) {
+        if (hasAsteriskValue && headerCount > 1) {
             // Note that an If-None-Match header field with a list value 
containing "*" and other values (including
             // other instances of "*") is syntactically invalid (therefore not 
allowed to be generated) and furthermore
             // is unlikely to be interoperable.


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

Reply via email to