break;
case PROP_SCHEME:
- if (addr->priv->scheme)
- g_free (addr->priv->scheme);
+ g_free (addr->priv->scheme);
addr->priv->scheme = g_value_dup_string (value);
break;
* Creates a new #GSocketConnectable for connecting to the given
* @hostname and @port.
*
- * Return value: (transfer full) (type GNetworkAddress): the new #GNetworkAddress
+ * Returns: (transfer full) (type GNetworkAddress): the new #GNetworkAddress
*
* Since: 2.22
*/
* is deprecated, because it depends on the contents of /etc/services,
* which is generally quite sparse on platforms other than Linux.)
*
- * Return value: (transfer full): the new #GNetworkAddress, or %NULL on error
+ * Returns: (transfer full): the new #GNetworkAddress, or %NULL on error
*
* Since: 2.22
*/
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);
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 / ":" )
* g_network_address_parse() allows #GSocketClient to determine
* when to use application-specific proxy protocols.
*
- * Return value: (transfer full): the new #GNetworkAddress, or %NULL on error
+ * Returns: (transfer full): the new #GNetworkAddress, or %NULL on error
*
* Since: 2.26
*/
* Gets @addr's hostname. This might be either UTF-8 or ASCII-encoded,
* depending on what @addr was created with.
*
- * Return value: @addr's hostname
+ * Returns: @addr's hostname
*
* Since: 2.22
*/
*
* Gets @addr's port number
*
- * Return value: @addr's port (which may be 0)
+ * Returns: @addr's port (which may be 0)
*
* Since: 2.22
*/
*
* Gets @addr's scheme
*
- * Return value: @addr's scheme (%NULL if not built from URI)
+ * Returns: @addr's scheme (%NULL if not built from URI)
*
* Since: 2.26
*/