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

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


The following commit(s) were added to refs/heads/main by this push:
     new d0c4cd2c17 Follow-up to HTTP/2 header filtering
d0c4cd2c17 is described below

commit d0c4cd2c17395f259dbf6f85fc1c7707be7073b8
Author: Mark Thomas <[email protected]>
AuthorDate: Fri May 1 10:55:20 2026 +0100

    Follow-up to HTTP/2 header filtering
    
    Implements some suggestions from a CoPilot review
    Fix hex/decimal confusion
    Add missing message parameters
---
 java/org/apache/coyote/http2/HPackHuffman.java     | 36 +++++++++++++---------
 .../apache/tomcat/util/http/parser/HttpParser.java |  2 +-
 2 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/java/org/apache/coyote/http2/HPackHuffman.java 
b/java/org/apache/coyote/http2/HPackHuffman.java
index 54180c7fba..d77502b6f3 100644
--- a/java/org/apache/coyote/http2/HPackHuffman.java
+++ b/java/org/apache/coyote/http2/HPackHuffman.java
@@ -400,20 +400,20 @@ public class HPackHuffman {
                         c = (char) (val & LOW_MASK);
                         if (isFieldName) {
                             if (!HttpParser.isToken(c) || 
Character.isUpperCase(c)) {
-                                throw new IllegalArgumentException(
-                                        
sm.getString("hpackhuffman.decode.illegalCharacterName"));
+                                throw new IllegalArgumentException(sm
+                                        
.getString("hpackhuffman.decode.illegalCharacterName", Character.toString(c)));
                             }
                         } else {
                             if (firstChar) {
                                 if (!HttpParser.isFieldVChar(c)) {
-                                    throw new IllegalArgumentException(
-                                            
sm.getString("hpackhuffman.decode.illegalCharacterValue.start"));
+                                    throw new 
IllegalArgumentException(sm.getString(
+                                            
"hpackhuffman.decode.illegalCharacterValue.start", Character.toString(c)));
                                 }
                                 firstChar = false;
                             } else {
                                 if (!HttpParser.isFieldContent(c)) {
-                                    throw new IllegalArgumentException(
-                                            
sm.getString("hpackhuffman.decode.illegalCharacterValue"));
+                                    throw new 
IllegalArgumentException(sm.getString(
+                                            
"hpackhuffman.decode.illegalCharacterValue", Character.toString(c)));
                                 }
                             }
                         }
@@ -439,20 +439,20 @@ public class HPackHuffman {
                         c = (char) ((val >> 16) & LOW_MASK);
                         if (isFieldName) {
                             if (!HttpParser.isToken(c) || 
Character.isUpperCase(c)) {
-                                throw new IllegalArgumentException(
-                                        
sm.getString("hpackhuffman.decode.illegalCharacterName"));
+                                throw new IllegalArgumentException(sm
+                                        
.getString("hpackhuffman.decode.illegalCharacterName", Character.toString(c)));
                             }
                         } else {
                             if (firstChar) {
                                 if (!HttpParser.isFieldVChar(c)) {
-                                    throw new IllegalArgumentException(
-                                            
sm.getString("hpackhuffman.decode.illegalCharacterValue.start"));
+                                    throw new 
IllegalArgumentException(sm.getString(
+                                            
"hpackhuffman.decode.illegalCharacterValue.start", Character.toString(c)));
                                 }
                                 firstChar = false;
                             } else {
                                 if (!HttpParser.isFieldContent(c)) {
-                                    throw new IllegalArgumentException(
-                                            
sm.getString("hpackhuffman.decode.illegalCharacterValue"));
+                                    throw new 
IllegalArgumentException(sm.getString(
+                                            
"hpackhuffman.decode.illegalCharacterValue", Character.toString(c)));
                                 }
                             }
                         }
@@ -472,8 +472,16 @@ public class HPackHuffman {
         if (!eosBits) {
             throw new 
HpackException(sm.getString("hpackhuffman.huffmanEncodedHpackValueDidNotEndWithEOS"));
         }
-        if (!HttpParser.isFieldVChar(c)) {
-            throw new 
IllegalArgumentException(sm.getString("hpackhuffman.decode.illegalCharacterValue.end"));
+        if (isFieldName) {
+            if (!HttpParser.isToken(c) || Character.isUpperCase(c)) {
+                throw new IllegalArgumentException(sm
+                        .getString("hpackhuffman.decode.illegalCharacterName", 
Character.toString(c)));
+            }
+        } else {
+            if (!HttpParser.isFieldVChar(c)) {
+                throw new IllegalArgumentException(
+                        
sm.getString("hpackhuffman.decode.illegalCharacterValue.end", 
Character.toString(c)));
+            }
         }
     }
 
diff --git a/java/org/apache/tomcat/util/http/parser/HttpParser.java 
b/java/org/apache/tomcat/util/http/parser/HttpParser.java
index e85e47214d..27db3127bf 100644
--- a/java/org/apache/tomcat/util/http/parser/HttpParser.java
+++ b/java/org/apache/tomcat/util/http/parser/HttpParser.java
@@ -117,7 +117,7 @@ public class HttpParser {
             }
 
             // field-vchar is VCHAR / obs-text
-            if (i > 20 && i < 127 || i > 127) {
+            if (i > 32 && i < 127 || i > 127) {
                 IS_FIELD_VCHAR[i] = true;
             }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to