Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2015-04-22 10:55:10 +0000
committerGreg Wilkins2015-04-22 10:56:09 +0000
commitf061ae79f4d8b4909ea98cf694715065153562dc (patch)
tree9853fcca763fad28124ae6846a057c5b2785f99a
parenta7bd9d1dd9b65645c78fa449a0a600f63e8bf19e (diff)
downloadorg.eclipse.jetty.project-f061ae79f4d8b4909ea98cf694715065153562dc.tar.gz
org.eclipse.jetty.project-f061ae79f4d8b4909ea98cf694715065153562dc.tar.xz
org.eclipse.jetty.project-f061ae79f4d8b4909ea98cf694715065153562dc.zip
465181 HttpParser delay messageComplete until after chunk trailer
-rw-r--r--jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java25
-rw-r--r--jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java6
2 files changed, 22 insertions, 9 deletions
diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
index df6decd457..f5ff98f6a9 100644
--- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
+++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
@@ -117,6 +117,7 @@ public class HttpParser
CHUNK_SIZE,
CHUNK_PARAMS,
CHUNK,
+ CHUNK_END,
END,
CLOSED
}
@@ -1453,10 +1454,7 @@ public class HttpParser
if (ch == HttpTokens.LINE_FEED)
{
if (_chunkLength == 0)
- {
- setState(State.END);
- return _handler.messageComplete();
- }
+ setState(State.CHUNK_END);
else
setState(State.CHUNK);
}
@@ -1473,10 +1471,7 @@ public class HttpParser
if (ch == HttpTokens.LINE_FEED)
{
if (_chunkLength == 0)
- {
- setState(State.END);
- return _handler.messageComplete();
- }
+ setState(State.CHUNK_END);
else
setState(State.CHUNK);
}
@@ -1507,6 +1502,20 @@ public class HttpParser
break;
}
+ case CHUNK_END:
+ {
+ // TODO handle chunk trailer
+ ch=next(buffer);
+ if (ch==0)
+ break;
+ if (ch == HttpTokens.LINE_FEED)
+ {
+ setState(State.END);
+ return _handler.messageComplete();
+ }
+ throw new IllegalCharacterException(_state,ch,buffer);
+ }
+
case CLOSED:
{
BufferUtil.clear(buffer);
diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java
index 192293c524..c9abb0d868 100644
--- a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java
+++ b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java
@@ -582,7 +582,8 @@ public class HttpParserTest
+ "0123456789\015\012"
+ "1a\015\012"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ\015\012"
- + "0\015\012");
+ + "0\015\012"
+ + "\015\012");
HttpParser.RequestHandler<ByteBuffer> handler = new Handler();
HttpParser parser= new HttpParser(handler);
parseAll(parser,buffer);
@@ -594,6 +595,9 @@ public class HttpParserTest
assertEquals("Header1", _hdr[0]);
assertEquals("value1", _val[0]);
assertEquals("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", _content);
+
+ assertTrue(_headerCompleted);
+ assertTrue(_messageCompleted);
}
@Test

Back to the top