From f657f51b3b432e7f17faf47b8572a0712084bf19 Mon Sep 17 00:00:00 2001 From: yangl777 Date: Mon, 25 Jul 2022 15:02:20 +0800 Subject: [PATCH] Include patch to work colon but no port --- ...port-url-treat-empty-port-as-default.patch | 78 +++++++++++++++++++ http-parser.spec | 7 +- 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 backport-url-treat-empty-port-as-default.patch diff --git a/backport-url-treat-empty-port-as-default.patch b/backport-url-treat-empty-port-as-default.patch new file mode 100644 index 0000000..0bcab57 --- /dev/null +++ b/backport-url-treat-empty-port-as-default.patch @@ -0,0 +1,78 @@ +From d1bb7a564e0f92ef2081d3af8b4b7f85a307c38f Mon Sep 17 00:00:00 2001 +From: Edward Thomson +Date: Fri, 14 Jun 2019 17:37:22 +0100 +Subject: [PATCH] url: treat empty port as default + +When parsing URLs, treat an empty port (eg `http://hostname:/`) as if it +were unspecified. RFC 3986 says: + +> URI producers and normalizers SHOULD omit the port component and its +> ":" delimiter if port is empty or if its value would be the same as +> that of the scheme's default. + +(Emphasis on the "SHOULD" is mine.) This indicates that URIs MAY be +produced with an empty port and the `:` delimiter. + +Thus, we stop failing if we end host parsing at the port delimiter. +--- + http_parser.c | 1 - + test.c | 25 +++++++++++++++++++------ + 2 files changed, 19 insertions(+), 7 deletions(-) + +diff --git a/http_parser.c b/http_parser.c +index 4896385..7e268d8 100644 +--- a/http_parser.c ++++ b/http_parser.c +@@ -2326,7 +2326,6 @@ http_parse_host(const char * buf, struct http_parser_url *u, int found_at) { + case s_http_host_v6: + case s_http_host_v6_zone_start: + case s_http_host_v6_zone: +- case s_http_host_port_start: + case s_http_userinfo: + case s_http_userinfo_start: + return 1; +diff --git a/test.c b/test.c +index 0140a18..54eca61 100644 +--- a/test.c ++++ b/test.c +@@ -2825,6 +2825,25 @@ const struct url_test url_tests[] = + ,.rv=0 + } + ++, {.name="proxy empty port" ++ ,.url="http://hostname:/" ++ ,.is_connect=0 ++ ,.u= ++ {.field_set=(1 << UF_SCHEMA) | (1 << UF_HOST) | (1 << UF_PATH) ++ ,.port=0 ++ ,.field_data= ++ {{ 0, 4 } /* UF_SCHEMA */ ++ ,{ 7, 8 } /* UF_HOST */ ++ ,{ 0, 0 } /* UF_PORT */ ++ ,{ 16, 1 } /* UF_PATH */ ++ ,{ 0, 0 } /* UF_QUERY */ ++ ,{ 0, 0 } /* UF_FRAGMENT */ ++ ,{ 0, 0 } /* UF_USERINFO */ ++ } ++ } ++ ,.rv=0 ++ } ++ + , {.name="CONNECT request" + ,.url="hostname:443" + ,.is_connect=1 +@@ -3059,12 +3078,6 @@ const struct url_test url_tests[] = + ,.rv=1 + } + +-, {.name="proxy empty port" +- ,.url="http://hostname:/" +- ,.is_connect=0 +- ,.rv=1 +- } +- + , {.name="CONNECT with basic auth" + ,.url="a:b@hostname:443" + ,.is_connect=1 +-- +2.25.1 diff --git a/http-parser.spec b/http-parser.spec index ca1f3fe..f95f48b 100644 --- a/http-parser.spec +++ b/http-parser.spec @@ -1,12 +1,14 @@ Name: http-parser Version: 2.9.4 -Release: 1 +Release: 2 Summary: HTTP request/response parser for C License: MIT URL: https://github.com/nodejs/%{name} Source0: https://github.com/nodejs/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz +Patch6000: backport-url-treat-empty-port-as-default.patch + BuildRequires: gcc meson %description @@ -82,6 +84,9 @@ EOF %doc AUTHORS README.md %changelog +* Mon Jul 25 2022 yanglu - 2.9.4-2 +- Include patch to work colon but no port + * Tue Jun 23 2020 hanzhijun - 2.9.4-1 - update to 2.9.4 -- Gitee