Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a8fbe1ad38 | ||
|
946d308f84 | ||
|
46cb912c3a | ||
|
273fceae81 | ||
|
59d1b822e3 | ||
|
5629670826 | ||
|
f592d4d6f2 | ||
|
2916eadae2 | ||
|
320bd738b0 | ||
|
e89b4c4e28 | ||
|
46851c8468 | ||
|
bc311e3519 | ||
|
a36807db76 | ||
|
6cdb745e6d | ||
|
1bcca996c3 | ||
|
c38c8e73c2 | ||
|
74df1b8e68 | ||
|
5d37695b41 | ||
|
a2cb149dea | ||
|
f1ac1c0978 | ||
|
ca7dd2facd | ||
|
de905bcf12 | ||
|
023cbff3d2 | ||
|
55101bd793 | ||
|
2c1e25661a | ||
|
22b78f0522 | ||
|
06b1f44b24 | ||
|
7369b9bbd0 | ||
|
c811bcd9c8 | ||
|
3b3a593060 |
7
.gitignore
vendored
7
.gitignore
vendored
@ -6,3 +6,10 @@
|
||||
/v2.6.0.tar.gz
|
||||
/v2.7.1.tar.gz
|
||||
/http-parser-2.7.1.tar.gz
|
||||
/http-parser-2.8.0.tar.gz
|
||||
/http-parser-2.8.1.tar.gz
|
||||
/http-parser-2.9.0.tar.gz
|
||||
/http-parser-2.9.1.tar.gz
|
||||
/http-parser-2.9.2.tar.gz
|
||||
/http-parser-2.9.3.tar.gz
|
||||
/http-parser-2.9.4.tar.gz
|
||||
|
79
0001-url-treat-empty-port-as-default.patch
Normal file
79
0001-url-treat-empty-port-as-default.patch
Normal file
@ -0,0 +1,79 @@
|
||||
From d1bb7a564e0f92ef2081d3af8b4b7f85a307c38f Mon Sep 17 00:00:00 2001
|
||||
From: Edward Thomson <ethomson@edwardthomson.com>
|
||||
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
|
||||
|
@ -1,101 +0,0 @@
|
||||
From 335850f6b868d3411968cbf5a4d59fe619dee36f Mon Sep 17 00:00:00 2001
|
||||
From: Nathaniel McCallum <npmccallum@redhat.com>
|
||||
Date: Thu, 6 Oct 2016 02:03:36 -0400
|
||||
Subject: [PATCH] parser: HTTP_STATUS_MAP(XX) and enum http_status
|
||||
|
||||
This patch provides an enum for the standardized HTTP status codes.
|
||||
Additionally, the HTTP_STATUS_MAP(XX) can be used for other purposes as
|
||||
well, such as code-to-name lookups and code-based switch statements.
|
||||
|
||||
PR-URL: https://github.com/nodejs/http-parser/pull/337
|
||||
Reviewed-By: Fedor Indutny <fedor@indutny.com>
|
||||
Reviewed-By: Brian White <mscdex@mscdex.net>
|
||||
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
|
||||
---
|
||||
http_parser.h | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 70 insertions(+)
|
||||
|
||||
diff --git a/http_parser.h b/http_parser.h
|
||||
index ea26394..45c72a0 100644
|
||||
--- a/http_parser.h
|
||||
+++ b/http_parser.h
|
||||
@@ -90,6 +90,76 @@ typedef int (*http_data_cb) (http_parser*, const char *at, size_t length);
|
||||
typedef int (*http_cb) (http_parser*);
|
||||
|
||||
|
||||
+/* Status Codes */
|
||||
+#define HTTP_STATUS_MAP(XX) \
|
||||
+ XX(100, CONTINUE, Continue) \
|
||||
+ XX(101, SWITCHING_PROTOCOLS, Switching Protocols) \
|
||||
+ XX(102, PROCESSING, Processing) \
|
||||
+ XX(200, OK, OK) \
|
||||
+ XX(201, CREATED, Created) \
|
||||
+ XX(202, ACCEPTED, Accepted) \
|
||||
+ XX(203, NON_AUTHORITATIVE_INFORMATION, Non-Authoritative Information) \
|
||||
+ XX(204, NO_CONTENT, No Content) \
|
||||
+ XX(205, RESET_CONTENT, Reset Content) \
|
||||
+ XX(206, PARTIAL_CONTENT, Partial Content) \
|
||||
+ XX(207, MULTI_STATUS, Multi-Status) \
|
||||
+ XX(208, ALREADY_REPORTED, Already Reported) \
|
||||
+ XX(226, IM_USED, IM Used) \
|
||||
+ XX(300, MULTIPLE_CHOICES, Multiple Choices) \
|
||||
+ XX(301, MOVED_PERMANENTLY, Moved Permanently) \
|
||||
+ XX(302, FOUND, Found) \
|
||||
+ XX(303, SEE_OTHER, See Other) \
|
||||
+ XX(304, NOT_MODIFIED, Not Modified) \
|
||||
+ XX(305, USE_PROXY, Use Proxy) \
|
||||
+ XX(307, TEMPORARY_REDIRECT, Temporary Redirect) \
|
||||
+ XX(308, PERMANENT_REDIRECT, Permanent Redirect) \
|
||||
+ XX(400, BAD_REQUEST, Bad Request) \
|
||||
+ XX(401, UNAUTHORIZED, Unauthorized) \
|
||||
+ XX(402, PAYMENT_REQUIRED, Payment Required) \
|
||||
+ XX(403, FORBIDDEN, Forbidden) \
|
||||
+ XX(404, NOT_FOUND, Not Found) \
|
||||
+ XX(405, METHOD_NOT_ALLOWED, Method Not Allowed) \
|
||||
+ XX(406, NOT_ACCEPTABLE, Not Acceptable) \
|
||||
+ XX(407, PROXY_AUTHENTICATION_REQUIRED, Proxy Authentication Required) \
|
||||
+ XX(408, REQUEST_TIMEOUT, Request Timeout) \
|
||||
+ XX(409, CONFLICT, Conflict) \
|
||||
+ XX(410, GONE, Gone) \
|
||||
+ XX(411, LENGTH_REQUIRED, Length Required) \
|
||||
+ XX(412, PRECONDITION_FAILED, Precondition Failed) \
|
||||
+ XX(413, PAYLOAD_TOO_LARGE, Payload Too Large) \
|
||||
+ XX(414, URI_TOO_LONG, URI Too Long) \
|
||||
+ XX(415, UNSUPPORTED_MEDIA_TYPE, Unsupported Media Type) \
|
||||
+ XX(416, RANGE_NOT_SATISFIABLE, Range Not Satisfiable) \
|
||||
+ XX(417, EXPECTATION_FAILED, Expectation Failed) \
|
||||
+ XX(421, MISDIRECTED_REQUEST, Misdirected Request) \
|
||||
+ XX(422, UNPROCESSABLE_ENTITY, Unprocessable Entity) \
|
||||
+ XX(423, LOCKED, Locked) \
|
||||
+ XX(424, FAILED_DEPENDENCY, Failed Dependency) \
|
||||
+ XX(426, UPGRADE_REQUIRED, Upgrade Required) \
|
||||
+ XX(428, PRECONDITION_REQUIRED, Precondition Required) \
|
||||
+ XX(429, TOO_MANY_REQUESTS, Too Many Requests) \
|
||||
+ XX(431, REQUEST_HEADER_FIELDS_TOO_LARGE, Request Header Fields Too Large) \
|
||||
+ XX(451, UNAVAILABLE_FOR_LEGAL_REASONS, Unavailable For Legal Reasons) \
|
||||
+ XX(500, INTERNAL_SERVER_ERROR, Internal Server Error) \
|
||||
+ XX(501, NOT_IMPLEMENTED, Not Implemented) \
|
||||
+ XX(502, BAD_GATEWAY, Bad Gateway) \
|
||||
+ XX(503, SERVICE_UNAVAILABLE, Service Unavailable) \
|
||||
+ XX(504, GATEWAY_TIMEOUT, Gateway Timeout) \
|
||||
+ XX(505, HTTP_VERSION_NOT_SUPPORTED, HTTP Version Not Supported) \
|
||||
+ XX(506, VARIANT_ALSO_NEGOTIATES, Variant Also Negotiates) \
|
||||
+ XX(507, INSUFFICIENT_STORAGE, Insufficient Storage) \
|
||||
+ XX(508, LOOP_DETECTED, Loop Detected) \
|
||||
+ XX(510, NOT_EXTENDED, Not Extended) \
|
||||
+ XX(511, NETWORK_AUTHENTICATION_REQUIRED, Network Authentication Required) \
|
||||
+
|
||||
+enum http_status
|
||||
+ {
|
||||
+#define XX(num, name, string) HTTP_STATUS_##name = num,
|
||||
+ HTTP_STATUS_MAP(XX)
|
||||
+#undef XX
|
||||
+ };
|
||||
+
|
||||
+
|
||||
/* Request Methods */
|
||||
#define HTTP_METHOD_MAP(XX) \
|
||||
XX(0, DELETE, DELETE) \
|
||||
--
|
||||
2.10.2
|
||||
|
159
http-parser.spec
159
http-parser.spec
@ -1,22 +1,16 @@
|
||||
# we use the upstream version from http_parser.h as the SONAME
|
||||
%global somajor 2
|
||||
%global sominor 7
|
||||
%global sopoint 1
|
||||
|
||||
Name: http-parser
|
||||
Version: %{somajor}.%{sominor}.%{sopoint}
|
||||
Release: 4%{?dist}
|
||||
Version: 2.9.4
|
||||
Release: 8%{?dist}
|
||||
Summary: HTTP request/response parser for C
|
||||
|
||||
License: MIT
|
||||
URL: https://github.com/nodejs/http-parser
|
||||
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||
# https://github.com/nodejs/http-parser/pull/483
|
||||
Patch0001: 0001-url-treat-empty-port-as-default.patch
|
||||
|
||||
# https://github.com/nodejs/http-parser/commit/335850f6b868d3411968cbf5a4d59fe619dee36f
|
||||
Patch0001: %{name}-0001-parser-HTTP_STATUS_MAP-XX-and-enum-http_status.patch
|
||||
|
||||
BuildRequires: meson
|
||||
BuildRequires: gcc
|
||||
BuildRequires: cmake
|
||||
|
||||
%description
|
||||
This is a parser for HTTP messages written in C. It parses both requests and
|
||||
@ -35,65 +29,45 @@ Development headers and libraries for http-parser.
|
||||
|
||||
%prep
|
||||
%autosetup -p1
|
||||
%ifarch %{arm}
|
||||
# https://github.com/nodejs/http-parser/issues/507
|
||||
sed -i -e "/sizeof(http_parser)/d" test.c
|
||||
%endif
|
||||
# TODO: try to send upstream?
|
||||
cat > CMakeLists.txt << EOF
|
||||
cmake_minimum_required (VERSION 2.8.5)
|
||||
project (http-parser C)
|
||||
include (GNUInstallDirs)
|
||||
|
||||
set (SRCS http_parser.c)
|
||||
set (HDRS http_parser.h)
|
||||
set (TEST_SRCS test.c)
|
||||
|
||||
# Non-Strict version
|
||||
add_library (http_parser \${SRCS})
|
||||
target_compile_definitions (http_parser
|
||||
PUBLIC -DHTTP_PARSER_STRICT=0)
|
||||
add_executable (test-nonstrict \${TEST_SRCS})
|
||||
target_link_libraries (test-nonstrict http_parser)
|
||||
# Strict version
|
||||
add_library (http_parser_strict \${SRCS})
|
||||
target_compile_definitions (http_parser_strict
|
||||
PUBLIC -DHTTP_PARSER_STRICT=1)
|
||||
add_executable (test-strict \${TEST_SRCS})
|
||||
target_link_libraries (test-strict http_parser_strict)
|
||||
|
||||
set_target_properties (http_parser http_parser_strict
|
||||
PROPERTIES
|
||||
SOVERSION %{somajor}
|
||||
VERSION %{version})
|
||||
|
||||
install (TARGETS http_parser http_parser_strict
|
||||
LIBRARY DESTINATION \${CMAKE_INSTALL_LIBDIR})
|
||||
install (FILES \${HDRS}
|
||||
DESTINATION \${CMAKE_INSTALL_INCLUDEDIR})
|
||||
|
||||
enable_testing ()
|
||||
add_test (NAME test-nonstrict COMMAND test-nonstrict)
|
||||
add_test (NAME test-strict COMMAND test-strict)
|
||||
cat > meson.build << EOF
|
||||
project('%{name}', 'c', version : '%{version}')
|
||||
install_headers('http_parser.h')
|
||||
foreach x : [['http_parser', ['-DHTTP_PARSER_STRICT=0']],
|
||||
['http_parser_strict', ['-DHTTP_PARSER_STRICT=1']]]
|
||||
lib = library(x.get(0), 'http_parser.c',
|
||||
c_args : x.get(1),
|
||||
version : '%{version}',
|
||||
install : true)
|
||||
test('test-@0@'.format(x.get(0)),
|
||||
executable('test-@0@'.format(x.get(0)), 'test.c',
|
||||
c_args : x.get(1),
|
||||
link_with : lib),
|
||||
timeout : 60)
|
||||
endforeach
|
||||
EOF
|
||||
|
||||
%build
|
||||
mkdir %{_target_platform}
|
||||
pushd %{_target_platform}
|
||||
%cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
popd
|
||||
%make_build -C %{_target_platform}
|
||||
%meson
|
||||
%meson_build
|
||||
|
||||
%install
|
||||
%make_install -C %{_target_platform}
|
||||
%meson_install
|
||||
|
||||
%check
|
||||
make test -C %{_target_platform}
|
||||
%meson_test
|
||||
|
||||
%post -p /sbin/ldconfig
|
||||
%postun -p /sbin/ldconfig
|
||||
%ldconfig_scriptlets
|
||||
|
||||
%files
|
||||
%license LICENSE-MIT
|
||||
%doc AUTHORS README.md
|
||||
%{_libdir}/libhttp_parser.so.*
|
||||
%{_libdir}/libhttp_parser_strict.so.*
|
||||
%doc AUTHORS README.md
|
||||
%license LICENSE-MIT
|
||||
|
||||
%files devel
|
||||
%{_includedir}/http_parser.h
|
||||
@ -101,6 +75,77 @@ make test -C %{_target_platform}
|
||||
%{_libdir}/libhttp_parser_strict.so
|
||||
|
||||
%changelog
|
||||
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.4-8
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.4-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.4-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.4-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.4-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.4-3
|
||||
- Second attempt - Rebuilt for
|
||||
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.4-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Wed Apr 15 2020 Igor Raits <ignatenkobrain@fedoraproject.org> - 2.9.4-1
|
||||
- Update to 2.9.4
|
||||
|
||||
* Mon Mar 02 2020 Igor Raits <ignatenkobrain@fedoraproject.org> - 2.9.3-2
|
||||
- Include patch to work with colon but no port
|
||||
|
||||
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.2-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.2-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Mon Apr 22 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.9.2-1
|
||||
- Update to 2.9.2
|
||||
|
||||
* Tue Apr 16 2019 Adam Williamson <awilliam@redhat.com> - 2.9.1-2
|
||||
- Rebuild with Meson fix for #1699099
|
||||
|
||||
* Thu Apr 11 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.9.1-1
|
||||
- Update to 2.9.1
|
||||
|
||||
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.8.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Mon Apr 02 2018 Stephen Gallagher <sgallagh@redhat.com> - 2.8.1-1
|
||||
- Update to 2.8.1
|
||||
|
||||
* Sat Feb 10 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.8.0-1
|
||||
- Update to 2.8.0
|
||||
- Switch to meson buildsystem
|
||||
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Sat Feb 03 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.7.1-8
|
||||
- Switch to %%ldconfig_scriptlets
|
||||
|
||||
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.7.1-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Mon Nov 21 2016 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 2.7.1-4
|
||||
- Use CMake buildsystem
|
||||
|
||||
|
2
package.cfg
Normal file
2
package.cfg
Normal file
@ -0,0 +1,2 @@
|
||||
[koji]
|
||||
targets = master fedora
|
Loading…
Reference in New Issue
Block a user