You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2012/11/02 20:57:31 UTC
svn commit: r1405133 - in /tomcat/trunk:
java/org/apache/tomcat/util/http/parser/HttpParser2.java
test/org/apache/tomcat/util/http/parser/TestHttpParser2.java
Author: markt
Date: Fri Nov 2 19:57:30 2012
New Revision: 1405133
URL: http://svn.apache.org/viewvc?rev=1405133&view=rev
Log:
Improve EOF handling with some test cases
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/parser/HttpParser2.java
tomcat/trunk/test/org/apache/tomcat/util/http/parser/TestHttpParser2.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/http/parser/HttpParser2.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/parser/HttpParser2.java?rev=1405133&r1=1405132&r2=1405133&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/parser/HttpParser2.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/parser/HttpParser2.java Fri Nov 2 19:57:30 2012
@@ -173,7 +173,7 @@ public class HttpParser2 {
int c = input.read();
if (c != constant.charAt(i)) {
if (optional) {
- input.skip(i);
+ input.skip(-(i+1));
return false;
} else {
throw new IllegalArgumentException(
@@ -186,9 +186,9 @@ public class HttpParser2 {
}
private static void skipLws(StringReader input) throws IOException {
- char c = (char) input.read();
+ int c = input.read();
while (c == 32 || c == 9) {
- c = (char) input.read();
+ c = input.read();
}
// Skip back so non-LWS character is available for next read
@@ -198,10 +198,10 @@ public class HttpParser2 {
private static String readToken(StringReader input) throws IOException {
StringBuilder result = new StringBuilder();
- char c = (char) input.read();
- while (c != 65535 && isToken[c]) {
- result.append(c);
- c = (char) input.read();
+ int c = input.read();
+ while (c != -1 && isToken[c]) {
+ result.append((char) c);
+ c = input.read();
}
// Skip back so non-token character is available for next read
input.skip(-1);
@@ -212,7 +212,7 @@ public class HttpParser2 {
private static String readQuotedString(StringReader input)
throws IOException {
- char c = (char) input.read();
+ int c = input.read();
if (c != '"') {
throw new IllegalArgumentException(
"TODO i18n: Quoted string must start with a quote");
@@ -220,15 +220,18 @@ public class HttpParser2 {
StringBuilder result = new StringBuilder();
- c = (char) input.read();
+ c = input.read();
while (c != '"') {
- if (c == '\\') {
- c = (char) input.read();
+ if (c == -1) {
+ throw new IllegalArgumentException(
+ "TODO i18n: Quoted string must end with a quote");
+ } else if (c == '\\') {
+ c = input.read();
result.append(c);
} else {
- result.append(c);
+ result.append((char) c);
}
- c = (char) input.read();
+ c = input.read();
}
return result.toString();
@@ -236,7 +239,7 @@ public class HttpParser2 {
private static String readTokenOrQuotedString(StringReader input)
throws IOException {
- char c = (char) input.read();
+ int c = input.read();
input.skip(-1);
if (c == '"') {
@@ -253,10 +256,10 @@ public class HttpParser2 {
private static String readLhex(StringReader input) throws IOException {
StringBuilder result = new StringBuilder();
- char c = (char) input.read();
- while (isHex[c]) {
- result.append(c);
- c = (char) input.read();
+ int c = input.read();
+ while (c != -1 && isHex[c]) {
+ result.append((char) c);
+ c = input.read();
}
// Skip back so non-hex character is available for next read
input.skip(-1);
Modified: tomcat/trunk/test/org/apache/tomcat/util/http/parser/TestHttpParser2.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/parser/TestHttpParser2.java?rev=1405133&r1=1405132&r2=1405133&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/parser/TestHttpParser2.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/parser/TestHttpParser2.java Fri Nov 2 19:57:30 2012
@@ -113,4 +113,43 @@ public class TestHttpParser2 {
Assert.assertEquals("auth", result.get("qop"));
Assert.assertEquals("9926cb3c334ede11", result.get("cnonce"));
}
+
+ @Test
+ public void testEndWithLhex() throws Exception {
+ String header = "Digest nc=00000001";
+
+ StringReader input = new StringReader(header);
+
+ Map<String,String> result = HttpParser2.parseAuthorizationDigest(input);
+
+ Assert.assertEquals("00000001", result.get("nc"));
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testUnclosedQuotedString1() throws Exception {
+ String header = "Digest username=\"test";
+
+ StringReader input = new StringReader(header);
+
+ HttpParser2.parseAuthorizationDigest(input);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testUnclosedQuotedString2() throws Exception {
+ String header = "Digest username=\"test\\";
+
+ StringReader input = new StringReader(header);
+
+ HttpParser2.parseAuthorizationDigest(input);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testNonTokenDirective() throws Exception {
+ String header = "Digest user{name=\"test\"";
+
+ StringReader input = new StringReader(header);
+
+ HttpParser2.parseAuthorizationDigest(input);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org