Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[glib] Add 0001-networkaddress-fix-parsing-of-uri-with-after-authori.…
…patch. Fixes JB#32240
- Loading branch information
Showing
2 changed files
with
65 additions
and
0 deletions.
There are no files selected for viewing
62 changes: 62 additions & 0 deletions
62
rpm/0001-networkaddress-fix-parsing-of-uri-with-after-authori.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
From 20feb23569e61b061b507e995b5438a35676ae51 Mon Sep 17 00:00:00 2001 | ||
From: Wim Taymans <wtaymans@redhat.com> | ||
Date: Mon, 10 Mar 2014 16:27:48 +0100 | ||
Subject: [PATCH] networkaddress: fix parsing of uri with @ after authority | ||
|
||
Make sure that the @ sign is inside the authority part before attempting | ||
to parse the userinfo. We do this by checking if the @ sign comes before | ||
any of the possible authority delimiters. | ||
Add unit test to verify parsing of ftp://ftp.gnome.org/start?foo=bar@baz | ||
|
||
https://bugzilla.gnome.org/show_bug.cgi?id=726040 | ||
--- | ||
gio/gnetworkaddress.c | 11 +++++++++-- | ||
gio/tests/network-address.c | 3 ++- | ||
2 files changed, 11 insertions(+), 3 deletions(-) | ||
|
||
diff --git a/gio/gnetworkaddress.c b/gio/gnetworkaddress.c | ||
index 342a6b9..0519713 100644 | ||
--- a/gio/gnetworkaddress.c | ||
+++ b/gio/gnetworkaddress.c | ||
@@ -453,7 +453,7 @@ _g_uri_parse_authority (const char *uri, | ||
char **userinfo) | ||
{ | ||
char *tmp_str; | ||
- const char *start, *p; | ||
+ const char *start, *p, *at, *delim; | ||
char c; | ||
|
||
g_return_val_if_fail (uri != NULL, FALSE); | ||
@@ -493,7 +493,14 @@ _g_uri_parse_authority (const char *uri, | ||
|
||
start += 2; | ||
|
||
- if (strchr (start, '@') != NULL) | ||
+ /* check if the @ sign is part of the authority before attempting to | ||
+ * decode the userinfo */ | ||
+ delim = strpbrk (start, "/?#[]"); | ||
+ at = strchr (start, '@'); | ||
+ if (at && delim && at > delim) | ||
+ at = NULL; | ||
+ | ||
+ if (at != NULL) | ||
{ | ||
/* Decode userinfo: | ||
* userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) | ||
diff --git a/gio/tests/network-address.c b/gio/tests/network-address.c | ||
index a8be415..ac4842c 100644 | ||
--- a/gio/tests/network-address.c | ||
+++ b/gio/tests/network-address.c | ||
@@ -42,7 +42,8 @@ static ParseTest uri_tests[] = { | ||
{ "http://[fec0::abcd%em1]/start", "http", "fec0::abcd%em1", 8080, -1 }, | ||
{ "http://[fec0::abcd%25em1]/start", "http", "fec0::abcd%em1", 8080, -1 }, | ||
{ "http://[fec0::abcd%10]/start", "http", "fec0::abcd%10", 8080, -1 }, | ||
- { "http://[fec0::abcd%25em%31]/start", NULL, NULL, 0, G_IO_ERROR_INVALID_ARGUMENT } | ||
+ { "http://[fec0::abcd%25em%31]/start", NULL, NULL, 0, G_IO_ERROR_INVALID_ARGUMENT }, | ||
+ { "ftp://ftp.gnome.org/start?foo=bar@baz", "ftp", "ftp.gnome.org", 8080, -1 } | ||
}; | ||
|
||
static void | ||
-- | ||
2.1.4 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters