diff options
-rw-r--r-- | gst/gsturi.c | 4 | ||||
-rw-r--r-- | tests/check/gst/gsturi.c | 25 |
2 files changed, 27 insertions, 2 deletions
diff --git a/gst/gsturi.c b/gst/gsturi.c index 75c3440ea..afe290794 100644 --- a/gst/gsturi.c +++ b/gst/gsturi.c @@ -313,7 +313,7 @@ gst_uri_protocol_is_valid (const gchar * protocol) gst_uri_protocol_check_internal (protocol, &endptr); - return *endptr == '\0' && endptr != protocol; + return *endptr == '\0' && ((gsize) (endptr - protocol)) >= 3; } /** @@ -334,7 +334,7 @@ gst_uri_is_valid (const gchar * uri) gst_uri_protocol_check_internal (uri, &endptr); - return *endptr == ':'; + return *endptr == ':' && ((gsize) (endptr - uri)) >= 3; } /** diff --git a/tests/check/gst/gsturi.c b/tests/check/gst/gsturi.c index ca6c2c9c1..4eee4f148 100644 --- a/tests/check/gst/gsturi.c +++ b/tests/check/gst/gsturi.c @@ -105,6 +105,30 @@ GST_END_TEST; #endif /* G_OS_WIN32 */ +GST_START_TEST (test_uri_misc) +{ + /* require at least three characters for the protocol */ + fail_if (gst_uri_is_valid ("B:\\foo.txt")); + fail_if (gst_uri_is_valid ("B:/foo.txt")); + fail_if (gst_uri_is_valid ("B://foo.txt")); + fail_if (gst_uri_is_valid ("B:foo.txt")); + + fail_if (gst_uri_is_valid ("AB:\\foo.txt")); + fail_if (gst_uri_is_valid ("AB:/foo.txt")); + fail_if (gst_uri_is_valid ("AB://foo.txt")); + fail_if (gst_uri_is_valid ("AB:foo.txt")); + + fail_unless (gst_uri_is_valid ("ABC:/foo.txt")); + fail_unless (gst_uri_is_valid ("ABC://foo.txt")); + fail_unless (gst_uri_is_valid ("ABC:foo.txt")); + + fail_unless (gst_uri_is_valid ("ABCD:/foo.txt")); + fail_unless (gst_uri_is_valid ("ABCD://foo.txt")); + fail_unless (gst_uri_is_valid ("ABCD:foo.txt")); +} + +GST_END_TEST; + static Suite * gst_uri_suite (void) { @@ -116,6 +140,7 @@ gst_uri_suite (void) suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_protocol_case); tcase_add_test (tc_chain, test_uri_get_location); + tcase_add_test (tc_chain, test_uri_misc); #ifdef G_OS_WIN32 tcase_add_test (tc_chain, test_win32_uri); #endif |