summaryrefslogtreecommitdiff
path: root/gio/gnetworkaddress.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2020-07-07 13:04:02 +0400
committerMarc-André Lureau <marcandre.lureau@redhat.com>2020-07-28 16:35:13 +0400
commitdd0fae13031cd61a866934fbc68e715ada3cf4ad (patch)
treedbd813ad0d3d3ef7877e64dc7cd05bd7de925172 /gio/gnetworkaddress.c
parentaa0b09ebeff911c9c9d2ca6c3efd06ff45a339f3 (diff)
downloadglib-dd0fae13031cd61a866934fbc68e715ada3cf4ad.tar.gz
gio: remove _g_uri_parse_authority()
It is now unused and redundant with GUri. Fixes: #2156 Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Diffstat (limited to 'gio/gnetworkaddress.c')
-rw-r--r--gio/gnetworkaddress.c246
1 files changed, 0 insertions, 246 deletions
diff --git a/gio/gnetworkaddress.c b/gio/gnetworkaddress.c
index 2fa10733e..a93bafa36 100644
--- a/gio/gnetworkaddress.c
+++ b/gio/gnetworkaddress.c
@@ -518,252 +518,6 @@ g_network_address_parse (const gchar *host_and_port,
return connectable;
}
-/* Allowed characters outside alphanumeric for unreserved. */
-#define G_URI_OTHER_UNRESERVED "-._~"
-
-/* This or something equivalent will eventually go into glib/guri.h */
-gboolean
-_g_uri_parse_authority (const char *uri,
- char **host,
- guint16 *port,
- char **userinfo,
- GError **error)
-{
- char *ascii_uri, *tmp_str;
- const char *start, *p, *at, *delim;
- char c;
-
- g_return_val_if_fail (uri != NULL, FALSE);
-
- if (host)
- *host = NULL;
-
- if (port)
- *port = 0;
-
- 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
- * path-abempty = *( "/" segment )
- * authority = [ userinfo "@" ] host [ ":" port ]
- */
-
- /* Check we have a valid scheme */
- tmp_str = g_uri_parse_scheme (ascii_uri);
-
- if (tmp_str == NULL)
- goto error;
-
- g_free (tmp_str);
-
- /* Decode hier-part:
- * hier-part = "//" authority path-abempty
- */
- p = ascii_uri;
- start = strstr (p, "//");
-
- if (start == NULL)
- goto error;
-
- start += 2;
-
- /* 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 / ":" )
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- * pct-encoded = "%" HEXDIG HEXDIG
- */
- p = start;
- while (1)
- {
- c = *p++;
-
- if (c == '@')
- break;
-
- /* pct-encoded */
- if (c == '%')
- {
- if (!(g_ascii_isxdigit (p[0]) ||
- g_ascii_isxdigit (p[1])))
- goto error;
-
- p++;
-
- continue;
- }
-
- /* unreserved / sub-delims / : */
- if (!(g_ascii_isalnum (c) ||
- strchr (G_URI_OTHER_UNRESERVED, c) ||
- strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
- c == ':'))
- goto error;
- }
-
- if (userinfo)
- *userinfo = g_strndup (start, p - start - 1);
-
- start = p;
- }
- else
- {
- p = start;
- }
-
-
- /* decode host:
- * host = IP-literal / IPv4address / reg-name
- * reg-name = *( unreserved / pct-encoded / sub-delims )
- */
-
- /* If IPv6 or IPvFuture */
- if (*p == '[')
- {
- gboolean has_scope_id = FALSE, has_bad_scope_id = FALSE;
-
- start++;
- p++;
- while (1)
- {
- c = *p++;
-
- if (c == ']')
- break;
-
- if (c == '%' && !has_scope_id)
- {
- has_scope_id = TRUE;
- if (p[0] != '2' || p[1] != '5')
- has_bad_scope_id = TRUE;
- continue;
- }
-
- /* unreserved / sub-delims */
- if (!(g_ascii_isalnum (c) ||
- strchr (G_URI_OTHER_UNRESERVED, c) ||
- strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
- c == ':' ||
- c == '.'))
- goto error;
- }
-
- if (host)
- {
- if (has_bad_scope_id)
- *host = g_strndup (start, p - start - 1);
- else
- *host = g_uri_unescape_segment (start, p - 1, NULL);
- }
-
- c = *p++;
- }
- else
- {
- while (1)
- {
- c = *p++;
-
- if (c == ':' ||
- c == '/' ||
- c == '?' ||
- c == '#' ||
- c == '\0')
- break;
-
- /* pct-encoded */
- if (c == '%')
- {
- if (!(g_ascii_isxdigit (p[0]) ||
- g_ascii_isxdigit (p[1])))
- goto error;
-
- p++;
-
- continue;
- }
-
- /* unreserved / sub-delims */
- if (!(g_ascii_isalnum (c) ||
- strchr (G_URI_OTHER_UNRESERVED, c) ||
- strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c)))
- goto error;
- }
-
- if (host)
- *host = g_uri_unescape_segment (start, p - 1, NULL);
- }
-
- if (c == ':')
- {
- /* Decode port:
- * port = *DIGIT
- */
- guint tmp = 0;
-
- while (1)
- {
- c = *p++;
-
- if (c == '/' ||
- c == '?' ||
- c == '#' ||
- c == '\0')
- break;
-
- if (!g_ascii_isdigit (c))
- goto error;
-
- tmp = (tmp * 10) + (c - '0');
-
- if (tmp > 65535)
- goto error;
- }
- if (port)
- *port = (guint16) tmp;
- }
-
- g_free (ascii_uri);
-
- return TRUE;
-
-error:
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- "Invalid URI ‘%s’", uri);
-
- if (host && *host)
- {
- g_free (*host);
- *host = NULL;
- }
-
- if (userinfo && *userinfo)
- {
- g_free (*userinfo);
- *userinfo = NULL;
- }
-
- g_free (ascii_uri);
-
- return FALSE;
-}
-
/**
* g_network_address_parse_uri:
* @uri: the hostname and optionally a port