Skip to content

Commit

Permalink
fix(server): ignore expect-continue with no body in debug mode
Browse files Browse the repository at this point in the history
Closes #1843
  • Loading branch information
seanmonstar committed Oct 18, 2019
1 parent a1fe383 commit ca5836f
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/proto/h1/conn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,9 @@ where I: AsyncRead + AsyncWrite + Unpin,
self.state.version = msg.head.version;

if msg.decode == DecodedLength::ZERO {
debug_assert!(!msg.expect_continue, "expect-continue needs a body");
if log_enabled!(log::Level::Debug) && msg.expect_continue {
debug!("ignoring expect-continue since body is empty");
}
self.state.reading = Reading::KeepAlive;
if !T::should_read_first() {
self.try_keep_alive(cx);
Expand Down
22 changes: 22 additions & 0 deletions tests/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,28 @@ fn expect_continue_sends_100() {
assert_eq!(body, msg);
}

#[test]
fn expect_continue_but_no_body_is_ignored() {
let server = serve();
let mut req = connect(server.addr());
server.reply();

// no content-length or transfer-encoding means no body!
req.write_all(b"\
POST /foo HTTP/1.1\r\n\
Host: example.domain\r\n\
Expect: 100-continue\r\n\
Connection: Close\r\n\
\r\n\
").expect("write");

let expected = "HTTP/1.1 200 OK\r\n";
let mut resp = String::new();
req.read_to_string(&mut resp).expect("read");

assert_eq!(&resp[..expected.len()], expected);
}

#[test]
fn pipeline_disabled() {
let server = serve();
Expand Down

0 comments on commit ca5836f

Please sign in to comment.