SoupAddress: fix handling of IPv6 literals
authorDan Winship <danw@gnome.org>
Sun, 7 Oct 2012 22:24:12 +0000 (18:24 -0400)
committerDan Winship <danw@gnome.org>
Sun, 7 Oct 2012 22:24:58 +0000 (18:24 -0400)
When generating a URI to pass to GProxyResolver, escape IPv6 literals properly.

https://bugzilla.gnome.org/show_bug.cgi?id=684990

libsoup/soup-address.c

index f2e698b..c298d3e 100644 (file)
@@ -1200,20 +1200,25 @@ soup_address_connectable_proxy_enumerate (GSocketConnectable *connectable)
        SoupAddress *addr = SOUP_ADDRESS (connectable);
        SoupAddressPrivate *priv = SOUP_ADDRESS_GET_PRIVATE (addr);
        GSocketAddressEnumerator *proxy_enum;
-       char *uri;
+       SoupURI *uri;
+       char *uri_string;
 
        /* We cheerily assume "http" here because you shouldn't be
         * using SoupAddress any more if you're not doing HTTP anyway.
         */
-       uri = g_strdup_printf ("%s://%s:%u",
-                              priv->protocol ? priv->protocol : "http",
-                              priv->name ? priv->name : soup_address_get_physical (addr),
-                              priv->port);
+       uri = soup_uri_new (NULL);
+       soup_uri_set_scheme (uri, priv->protocol ? priv->protocol : "http");
+       soup_uri_set_host (uri, priv->name ? priv->name : soup_address_get_physical (addr));
+       soup_uri_set_port (uri, priv->port);
+       soup_uri_set_path (uri, "");
+       uri_string = soup_uri_to_string (uri, FALSE);
+
        proxy_enum = g_object_new (G_TYPE_PROXY_ADDRESS_ENUMERATOR,
                                   "connectable", connectable,
-                                  "uri", uri,
+                                  "uri", uri_string,
                                   NULL);
-       g_free (uri);
+       g_free (uri_string);
+       soup_uri_free (uri);
 
        return proxy_enum;
 }