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 664049a  Refactor. Add new method isToken(String) to reduce duplication
664049a is described below

commit 664049ad8a6b1ccda5a05a571313fa3d14875507
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Jan 7 19:46:15 2022 +0000

    Refactor. Add new method isToken(String) to reduce duplication
---
 .../catalina/core/ApplicationPushBuilder.java      |  7 ++---
 .../apache/tomcat/util/http/parser/HttpParser.java | 17 ++++++++++
 .../tomcat/util/http/parser/TestHttpParser.java    | 36 ++++++++++++++++++++++
 webapps/docs/changelog.xml                         |  3 ++
 4 files changed, 58 insertions(+), 5 deletions(-)

diff --git a/java/org/apache/catalina/core/ApplicationPushBuilder.java 
b/java/org/apache/catalina/core/ApplicationPushBuilder.java
index 805d32c..67729cf 100644
--- a/java/org/apache/catalina/core/ApplicationPushBuilder.java
+++ b/java/org/apache/catalina/core/ApplicationPushBuilder.java
@@ -199,11 +199,8 @@ public class ApplicationPushBuilder implements PushBuilder 
{
                     sm.getString("applicationPushBuilder.methodInvalid", 
upperMethod));
         }
         // Check a token was supplied
-        for (char c : upperMethod.toCharArray()) {
-            if (!HttpParser.isToken(c)) {
-                throw new IllegalArgumentException(
-                        sm.getString("applicationPushBuilder.methodNotToken", 
upperMethod));
-            }
+        if (!HttpParser.isToken(upperMethod)) {
+            throw new 
IllegalArgumentException(sm.getString("applicationPushBuilder.methodNotToken", 
upperMethod));
         }
         this.method = method;
         return this;
diff --git a/java/org/apache/tomcat/util/http/parser/HttpParser.java 
b/java/org/apache/tomcat/util/http/parser/HttpParser.java
index b06d468..7dcb631 100644
--- a/java/org/apache/tomcat/util/http/parser/HttpParser.java
+++ b/java/org/apache/tomcat/util/http/parser/HttpParser.java
@@ -237,6 +237,23 @@ public class HttpParser {
     }
 
 
+    public static boolean isToken(String s) {
+        // token = 1 * tchar (RFC 7230)
+        if (s == null) {
+            return false;
+        }
+        if (s.isEmpty()) {
+            return false;
+        }
+        for (char c : s.toCharArray()) {
+            if (!isToken(c)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+
     public static boolean isHex(int c) {
         // Fast for correct values, slower for some incorrect ones
         try {
diff --git a/test/org/apache/tomcat/util/http/parser/TestHttpParser.java 
b/test/org/apache/tomcat/util/http/parser/TestHttpParser.java
index 6280ab6..eda10e3 100644
--- a/test/org/apache/tomcat/util/http/parser/TestHttpParser.java
+++ b/test/org/apache/tomcat/util/http/parser/TestHttpParser.java
@@ -142,4 +142,40 @@ public class TestHttpParser {
         String result = "ab\"ab";
         Assert.assertEquals(result, HttpParser.unquote(shortText));
     }
+
+
+    @Test
+    public void testTokenStringNull() {
+        Assert.assertFalse(HttpParser.isToken(null));
+    }
+
+
+    @Test
+    public void testTokenStringEmpty() {
+        Assert.assertFalse(HttpParser.isToken(""));
+    }
+
+
+    @Test
+    public void testTokenStringLws01() {
+        Assert.assertFalse(HttpParser.isToken(" "));
+    }
+
+
+    @Test
+    public void testTokenStringLws02() {
+        Assert.assertFalse(HttpParser.isToken(" aaa"));
+    }
+
+
+    @Test
+    public void testTokenStringLws03() {
+        Assert.assertFalse(HttpParser.isToken("\taaa"));
+    }
+
+
+    @Test
+    public void testTokenStringValid() {
+        Assert.assertTrue(HttpParser.isToken("token"));
+    }
 }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 51964e7..31c1cba 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -145,6 +145,9 @@
         <bug>65767</bug>:  Add support for certificates that use keys encrypted
         using PBES2. Based on a pull request provided by xiezhaokun. (markt)
       </add>
+      <scode>
+        Refactor testing whether a String is a valid HTTP token. (markt)
+      </scode>
     </changelog>
   </subsection>
   <subsection name="Jasper">

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

Reply via email to