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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]