Merge pull request #647 from mlalic/issue-646
fix(http): Make sure not to lose the stream when CL is invalid
This commit is contained in:
		| @@ -225,6 +225,7 @@ impl HttpMessage for Http11Message { | |||||||
|                 SizedReader(stream, len) |                 SizedReader(stream, len) | ||||||
|             } else if headers.has::<ContentLength>() { |             } else if headers.has::<ContentLength>() { | ||||||
|                 trace!("illegal Content-Length: {:?}", headers.get_raw("Content-Length")); |                 trace!("illegal Content-Length: {:?}", headers.get_raw("Content-Length")); | ||||||
|  |                 self.stream = Some(stream.into_inner()); | ||||||
|                 return Err(Error::Header); |                 return Err(Error::Header); | ||||||
|             } else { |             } else { | ||||||
|                 trace!("neither Transfer-Encoding nor Content-Length"); |                 trace!("neither Transfer-Encoding nor Content-Length"); | ||||||
| @@ -893,10 +894,12 @@ mod tests { | |||||||
|     use std::error::Error; |     use std::error::Error; | ||||||
|     use std::io::{self, Read, Write}; |     use std::io::{self, Read, Write}; | ||||||
|  |  | ||||||
|  |  | ||||||
|     use buffer::BufReader; |     use buffer::BufReader; | ||||||
|     use mock::MockStream; |     use mock::MockStream; | ||||||
|  |     use http::HttpMessage; | ||||||
|  |  | ||||||
|     use super::{read_chunk_size, parse_request, parse_response}; |     use super::{read_chunk_size, parse_request, parse_response, Http11Message}; | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_write_chunked() { |     fn test_write_chunked() { | ||||||
| @@ -987,6 +990,15 @@ mod tests { | |||||||
|         assert_eq!(e.description(), "early eof"); |         assert_eq!(e.description(), "early eof"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_message_get_incoming_invalid_content_length() { | ||||||
|  |         let raw = MockStream::with_input( | ||||||
|  |             b"HTTP/1.1 200 OK\r\nContent-Length: asdf\r\n\r\n"); | ||||||
|  |         let mut msg = Http11Message::with_stream(Box::new(raw)); | ||||||
|  |         assert!(msg.get_incoming().is_err()); | ||||||
|  |         assert!(msg.close_connection().is_ok()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_parse_incoming() { |     fn test_parse_incoming() { | ||||||
|         let mut raw = MockStream::with_input(b"GET /echo HTTP/1.1\r\nHost: hyper.rs\r\n\r\n"); |         let mut raw = MockStream::with_input(b"GET /echo HTTP/1.1\r\nHost: hyper.rs\r\n\r\n"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user