-
-
Couldn't load subscription status.
- Fork 122
Description
I am trying to use reqwest to parse a response from a server I don't control. reqwest uses hyper which uses httparse for parsing HTTP/1.x headers. Anyway, this server has a weird bug where it consistently returns a single corrupted header line in an otherwise completely valid response (the header contains unescaped non-token characters). Specifically, for some reason it tries to send the DOCTYPE as a header. The bug is unlikely to be fixed (this is old software), but it isn't really a problem because the page displays fine in all major browsers.
It seems that all major browsers simply ignore invalid header lines. However, httparse returns an error that aborts the entire parsing process. IMO this is a problem and should be fixed.
Here's a screenshot from Chrome that shows the invalid header being ignored:
In fact, Chrome's behavior is commented as: "skip malformed header".
Although technically changing this could be breaking, in this case, I can't imagine that any code would rely on response parsing to fail in this particular case.
Here are the relevant lines:
Lines 594 to 595 in 6f696f5
| } else if !is_header_name_token(b) { | |
| return Err(Error::HeaderName); |
Lines 613 to 614 in 6f696f5
| } else if !is_header_name_token(b) { | |
| return Err(Error::HeaderName); |
Line 672 in 6f696f5
| expect!(bytes.next() == b'\n' => Err(Error::HeaderValue)); |
Lines 613 to 614 in 6f696f5
| } else if !is_header_name_token(b) { | |
| return Err(Error::HeaderName); |
I think all of these would be fixed by consuming b until the next newline then continue 'headers. I would open a PR but I just want to check that you agree that this change should be made.

