diff options
Diffstat (limited to 'backport-allow-for-relative-uris-that-include-colons-within-the-path.patch')
-rw-r--r-- | backport-allow-for-relative-uris-that-include-colons-within-the-path.patch | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/backport-allow-for-relative-uris-that-include-colons-within-the-path.patch b/backport-allow-for-relative-uris-that-include-colons-within-the-path.patch deleted file mode 100644 index 4bb1747..0000000 --- a/backport-allow-for-relative-uris-that-include-colons-within-the-path.patch +++ /dev/null @@ -1,90 +0,0 @@ -From e814d33900992e034a8c3ddec2c65463c5206090 Mon Sep 17 00:00:00 2001 -From: Michael Brown <mcb30@ipxe.org> -Date: Thu, 13 Jan 2022 14:53:36 +0000 -Subject: [PATCH] [uri] Allow for relative URIs that include colons within the - path - -RFC3986 allows for colons to appear within the path component of a -relative URI, but iPXE will currently parse such URIs incorrectly by -interpreting the text before the colon as the URI scheme. - -Fix by checking for valid characters when identifying the URI scheme. -Deliberately deviate from the RFC3986 definition of valid characters -by accepting "_" (which was incorrectly used in the iPXE-specific -"ib_srp" URI scheme and so must be accepted for compatibility with -existing deployments), and by omitting the code to check for -characters that are not used in any URI scheme supported by iPXE. - -Reported-by: Ignat Korchagin <ignat@cloudflare.com> -Signed-off-by: Michael Brown <mcb30@ipxe.org> - -Conflict:NA -Reference:https://github.com/ipxe/ipxe/commit/e814d33900992e034a8c3ddec2c65463c5206090 ---- - src/core/uri.c | 15 ++++++++++----- - src/tests/uri_test.c | 10 ++++++++++ - 2 files changed, 20 insertions(+), 5 deletions(-) - -diff --git a/src/core/uri.c b/src/core/uri.c -index a0f79e9ec1..b82472ef03 100644 ---- a/src/core/uri.c -+++ b/src/core/uri.c -@@ -334,8 +334,15 @@ struct uri * parse_uri ( const char *uri_string ) { - uri->efragment = tmp; - } - -- /* Identify absolute/relative URI */ -- if ( ( tmp = strchr ( raw, ':' ) ) ) { -+ /* Identify absolute URIs */ -+ epath = raw; -+ for ( tmp = raw ; ; tmp++ ) { -+ /* Possible scheme character (for our URI schemes) */ -+ if ( isalpha ( *tmp ) || ( *tmp == '-' ) || ( *tmp == '_' ) ) -+ continue; -+ /* Invalid scheme character or NUL: is a relative URI */ -+ if ( *tmp != ':' ) -+ break; - /* Absolute URI: identify hierarchical/opaque */ - uri->scheme = raw; - *(tmp++) = '\0'; -@@ -347,9 +354,7 @@ struct uri * parse_uri ( const char *uri_string ) { - uri->opaque = tmp; - epath = NULL; - } -- } else { -- /* Relative URI */ -- epath = raw; -+ break; - } - - /* If we don't have a path (i.e. we have an absolute URI with -diff --git a/src/tests/uri_test.c b/src/tests/uri_test.c -index 929ab36325..338f479cd3 100644 ---- a/src/tests/uri_test.c -+++ b/src/tests/uri_test.c -@@ -657,6 +657,15 @@ static struct uri_test uri_file_volume = { - }, - }; - -+/** Relative URI with colons in path */ -+static struct uri_test uri_colons = { -+ "/boot/52:54:00:12:34:56/boot.ipxe", -+ { -+ .path = "/boot/52:54:00:12:34:56/boot.ipxe", -+ .epath = "/boot/52:54:00:12:34:56/boot.ipxe", -+ }, -+}; -+ - /** URI with port number */ - static struct uri_port_test uri_explicit_port = { - "http://192.168.0.1:8080/boot.php", -@@ -957,6 +966,7 @@ static void uri_test_exec ( void ) { - uri_parse_format_dup_ok ( &uri_file_relative ); - uri_parse_format_dup_ok ( &uri_file_absolute ); - uri_parse_format_dup_ok ( &uri_file_volume ); -+ uri_parse_format_dup_ok ( &uri_colons ); - - /** URI port number tests */ - uri_port_ok ( &uri_explicit_port ); - - |