This is an automated email from the ASF dual-hosted git repository. markt 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 fe909ba Refactor. Add new method isToken(String) to reduce duplication fe909ba is described below commit fe909bad46150ffb9dcd436c0095ab97c20a2745 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 ++--- .../tomcat/util/http/Rfc6265CookieProcessor.java | 10 ++---- .../apache/tomcat/util/http/parser/HttpParser.java | 17 ++++++++++ .../tomcat/util/http/parser/TestHttpParser.java | 36 ++++++++++++++++++++++ webapps/docs/changelog.xml | 3 ++ 5 files changed, 61 insertions(+), 12 deletions(-) diff --git a/java/org/apache/catalina/core/ApplicationPushBuilder.java b/java/org/apache/catalina/core/ApplicationPushBuilder.java index 0b5679b..525c779 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/Rfc6265CookieProcessor.java b/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java index 79fe0d9..b7f85f5 100644 --- a/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java +++ b/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java @@ -272,15 +272,11 @@ public class Rfc6265CookieProcessor extends CookieProcessorBase { private void validateAttribute(String name, String value) { - char[] chars = name.toCharArray(); - for (char ch : chars) { - if (!HttpParser.isToken(ch)) { - throw new IllegalArgumentException(sm.getString( - "rfc6265CookieProcessor.invalidAttributeName", name)); - } + if (!HttpParser.isToken(name)) { + throw new IllegalArgumentException(sm.getString("rfc6265CookieProcessor.invalidAttributeName", name)); } - chars = value.toCharArray(); + char[] chars = value.toCharArray(); for (char ch : chars) { if (ch < 0x20 || ch > 0x7E || ch == ';') { throw new IllegalArgumentException(sm.getString( 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 f71c7e6..388893c 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -154,6 +154,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