Skip to content
This repository has been archived by the owner on Nov 6, 2022. It is now read-only.

Fix http_parser_parse_url to handle very long URLs #480

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

piru
Copy link

@piru piru commented May 9, 2019

Earlier http_parser_parse_url would incorrectly parse very long URLs: The resulting off and len parameters would just get truncated. Even though very long URLs are typically considered invalid by servers they could still end up being parsed by http_parser_parse_url. Thus it's better handle this situation gracefully.

This change is unfortunately not backwards ABI compatible due to changes in http_parser_url structure field types, hence the major version number bump.

Earlier http_parser_parse_url would incorrectly parse very long URLs: The
resulting off and len parameters would just get truncated. Even though very
long URLs are typically considered invalid by servers they could still end
up being parsed by http_parser_parse_url. Thus it's better handle this
situation gracefully.

This change is unfortunately not backwards ABI compatible due to changes in
http_parser_url structure field types, hence the major version number bump.
@piru
Copy link
Author

piru commented May 9, 2019

I'd also note that the issue of failing to parse very long URLs properly might also have a security impact: For example if a security critical code would use http_parser_parse_url function to parse the path of a request and then examine the path to see if it should be passed thru some filter. Due to this issue the parsed and actual paths could differ, which might result in filter bypass.

However, to be exploitable the actual implementation would still been to accept the very long URL.

If this PR is deemed too drastic of a change, alternatively adding checks for off and len overflows should be done instead.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants