[glib] networkaddress: Add early sanity check to _g_uri_parse_authority()
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] networkaddress: Add early sanity check to _g_uri_parse_authority()
- Date: Thu, 1 Feb 2018 14:59:39 +0000 (UTC)
commit 99b792fac047b2f495d83ca0a1c1a481ed838251
Author: Bastien Nocera <hadess hadess net>
Date: Thu Jan 12 15:44:11 2017 +0100
networkaddress: Add early sanity check to _g_uri_parse_authority()
Check whether the URI is valid ASCII before trying to parse it. This
should catch broken URIs early.
https://bugzilla.gnome.org/show_bug.cgi?id=772989
gio/gnetworkaddress.c | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
---
diff --git a/gio/gnetworkaddress.c b/gio/gnetworkaddress.c
index 1cb4a2b..be68317 100644
--- a/gio/gnetworkaddress.c
+++ b/gio/gnetworkaddress.c
@@ -492,7 +492,7 @@ _g_uri_parse_authority (const char *uri,
char **userinfo,
GError **error)
{
- char *tmp_str;
+ char *ascii_uri, *tmp_str;
const char *start, *p, *at, *delim;
char c;
@@ -507,6 +507,11 @@ _g_uri_parse_authority (const char *uri,
if (userinfo)
*userinfo = NULL;
+ /* Catch broken URIs early by trying to convert to ASCII. */
+ ascii_uri = g_hostname_to_ascii (uri);
+ if (!ascii_uri)
+ goto error;
+
/* From RFC 3986 Decodes:
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
* hier-part = "//" authority path-abempty
@@ -515,7 +520,7 @@ _g_uri_parse_authority (const char *uri,
*/
/* Check we have a valid scheme */
- tmp_str = g_uri_parse_scheme (uri);
+ tmp_str = g_uri_parse_scheme (ascii_uri);
if (tmp_str == NULL)
goto error;
@@ -525,7 +530,7 @@ _g_uri_parse_authority (const char *uri,
/* Decode hier-part:
* hier-part = "//" authority path-abempty
*/
- p = uri;
+ p = ascii_uri;
start = strstr (p, "//");
if (start == NULL)
@@ -715,6 +720,8 @@ error:
*userinfo = NULL;
}
+ g_free (ascii_uri);
+
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]