mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-01 05:13:06 +02:00
uri: change g_uri_is_valid() to check absolute URI
g_uri_is_valid() should check the given URI is valid following RFC-3986, and reject relative references. Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2169 Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
44d4640c47
commit
82ad7853ba
19
glib/guri.c
19
glib/guri.c
@ -1039,32 +1039,29 @@ g_uri_split_network (const gchar *uri_string,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_uri_is_valid:
|
* g_uri_is_valid:
|
||||||
* @uri_ref: a string containing a relative or absolute URI
|
* @uri_string: a string containing an absolute URI
|
||||||
* @flags: flags for parsing @uri_ref
|
* @flags: flags for parsing @uri_string
|
||||||
* @error: #GError for error reporting, or %NULL to ignore.
|
* @error: #GError for error reporting, or %NULL to ignore.
|
||||||
*
|
*
|
||||||
* Parses @uri_ref (which can be an absolute or relative URI)
|
* Parses @uri_string according to @flags, to determine whether it is valid
|
||||||
* according to @flags, to determine whether it is valid.
|
* absolute URI.
|
||||||
*
|
*
|
||||||
* See g_uri_split(), and the definition of #GUriFlags, for more
|
* See g_uri_split(), and the definition of #GUriFlags, for more
|
||||||
* information on the effect of @flags.
|
* information on the effect of @flags.
|
||||||
*
|
*
|
||||||
* Returns: %TRUE if @uri_ref parsed successfully, %FALSE on error.
|
* Returns: %TRUE if @uri_string parsed successfully, %FALSE on error.
|
||||||
*
|
*
|
||||||
* Since: 2.66
|
* Since: 2.66
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
g_uri_is_valid (const gchar *uri_ref,
|
g_uri_is_valid (const gchar *uri_string,
|
||||||
GUriFlags flags,
|
GUriFlags flags,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (uri_ref != NULL, FALSE);
|
g_return_val_if_fail (uri_string != NULL, FALSE);
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
return g_uri_split_internal (uri_ref, flags,
|
return g_uri_split_network (uri_string, flags, NULL, NULL, NULL, error);
|
||||||
NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL,
|
|
||||||
error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ gboolean g_uri_split_network (const gchar *uri_string,
|
|||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
GLIB_AVAILABLE_IN_2_66
|
GLIB_AVAILABLE_IN_2_66
|
||||||
gboolean g_uri_is_valid (const gchar *uri_ref,
|
gboolean g_uri_is_valid (const gchar *uri_string,
|
||||||
GUriFlags flags,
|
GUriFlags flags,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
@ -1267,7 +1267,9 @@ test_uri_is_valid (void)
|
|||||||
g_assert_true (g_uri_is_valid ("http://\xc3\x89XAMPLE.COM/", G_URI_FLAGS_NONE, NULL));
|
g_assert_true (g_uri_is_valid ("http://\xc3\x89XAMPLE.COM/", G_URI_FLAGS_NONE, NULL));
|
||||||
|
|
||||||
g_assert_true (g_uri_is_valid (" \r http\t://f oo \t\n ", G_URI_FLAGS_NONE, NULL));
|
g_assert_true (g_uri_is_valid (" \r http\t://f oo \t\n ", G_URI_FLAGS_NONE, NULL));
|
||||||
g_assert_true (g_uri_is_valid (" \r http\t://f oo \t\n ", G_URI_FLAGS_PARSE_STRICT, NULL));
|
g_assert_false (g_uri_is_valid (" \r http\t://f oo \t\n ", G_URI_FLAGS_PARSE_STRICT, &error));
|
||||||
|
g_assert_error (error, G_URI_ERROR, G_URI_ERROR_BAD_SCHEME);
|
||||||
|
g_clear_error (&error);
|
||||||
|
|
||||||
g_assert_false (g_uri_is_valid ("http://[::192.9.5.5/ipng", G_URI_FLAGS_NONE, &error));
|
g_assert_false (g_uri_is_valid ("http://[::192.9.5.5/ipng", G_URI_FLAGS_NONE, &error));
|
||||||
g_assert_error (error, G_URI_ERROR, G_URI_ERROR_BAD_HOST);
|
g_assert_error (error, G_URI_ERROR, G_URI_ERROR_BAD_HOST);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user