summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmediaart/cache.c26
-rw-r--r--tests/mediaarttest.c2
2 files changed, 28 insertions, 0 deletions
diff --git a/libmediaart/cache.c b/libmediaart/cache.c
index ecbc7a1..7d35401 100644
--- a/libmediaart/cache.c
+++ b/libmediaart/cache.c
@@ -115,6 +115,9 @@ media_art_strip_find_next_block (const gchar *original,
* 2. Text inside brackets of (), {}, [] and <> pairs are removed.
* 3. Multiples of space characters are removed.
*
+ * This function expects that the input is valid UTF-8. Use g_utf8_validate()
+ * if the input has not already been validated.
+ *
* Returns: @original stripped of invalid characters which must be
* freed. On error or if @original is empty, %NULL is returned.
*
@@ -141,6 +144,7 @@ media_art_strip_invalid_entities (const gchar *original)
};
g_return_val_if_fail (original != NULL, NULL);
+ g_return_val_if_fail (g_utf8_validate (original, -1, NULL), NULL);
str_no_blocks = g_string_new ("");
@@ -262,6 +266,9 @@ media_art_checksum_for_data (GChecksumType checksum_type,
* This operation should not use i/o, but it depends on the backend
* GFile implementation.
*
+ * All string inputs must be valid UTF8. Use g_utf8_validate() if the
+ * input has not already been validated.
+ *
* Returns: %TRUE if @cache_file was returned, otherwise %FALSE.
*
* Since: 0.2.0
@@ -272,6 +279,10 @@ media_art_get_file (const gchar *artist,
const gchar *prefix,
GFile **cache_file)
{
+ g_return_val_if_fail (g_utf8_validate (artist, -1, NULL), FALSE);
+ g_return_val_if_fail (g_utf8_validate (title, -1, NULL), FALSE);
+ g_return_val_if_fail (g_utf8_validate (prefix, -1, NULL), FALSE);
+
const gchar *space_checksum = "7215ee9c7d9dc229d2921a40e899ec5f";
const gchar *a, *b;
@@ -369,6 +380,9 @@ media_art_get_file (const gchar *artist,
* Get the path to media art for a given resource. Newly allocated
* data returned in @cache_path must be freed with g_free().
*
+ * All string inputs must be valid UTF8. Use g_utf8_validate() if the
+ * input has not already been validated.
+ *
* Returns: %TRUE if @cache_path was returned, otherwise %FALSE.
*
* Since: 0.2.0
@@ -381,6 +395,10 @@ media_art_get_path (const gchar *artist,
{
GFile *cache_file = NULL;
+ g_return_val_if_fail (g_utf8_validate (artist, -1, NULL), FALSE);
+ g_return_val_if_fail (g_utf8_validate (title, -1, NULL), FALSE);
+ g_return_val_if_fail (g_utf8_validate (prefix, -1, NULL), FALSE);
+
/* Rules:
* 1. artist OR title must be non-NULL.
* 2. cache_file must be non-NULL
@@ -407,6 +425,9 @@ media_art_get_path (const gchar *artist,
*
* If @artist and @album are %NULL, ALL media art cache is removed.
*
+ * All string inputs must be valid UTF8. Use g_utf8_validate() if the
+ * input has not already been validated.
+ *
* Returns: #TRUE on success, otherwise #FALSE where @error will be set.
*
* Since: 0.2.0
@@ -424,6 +445,8 @@ media_art_remove (const gchar *artist,
gboolean success = TRUE;
g_return_val_if_fail (artist != NULL && artist[0] != '\0', FALSE);
+ g_return_val_if_fail (g_utf8_validate (artist, -1, NULL), FALSE);
+ g_return_val_if_fail (g_utf8_validate (album, -1, NULL), FALSE);
dirname = g_build_filename (g_get_user_cache_dir (), "media-art", NULL);
@@ -604,6 +627,9 @@ remove_thread (GTask *task,
* value) will be executed before an outstanding request with lower
* priority. Default priority is %G_PRIORITY_DEFAULT.
*
+ * All string inputs must be valid UTF8. Use g_utf8_validate() if the
+ * input has not already been validated.
+ *
* Since: 0.7.0
*/
void
diff --git a/tests/mediaarttest.c b/tests/mediaarttest.c
index cef36c2..1ddb2d7 100644
--- a/tests/mediaarttest.c
+++ b/tests/mediaarttest.c
@@ -54,6 +54,8 @@ static TestInfo strip_test_cases [] = {
{ "unbalanced-brackets-gt-lt-end", "Unbalanced brackets>", NULL, "unbalanced brackets" },
{ "messy-title-punctuation", "Live at *WEMBLEY* dude!", NULL, "live at wembley dude" },
{ "crap-brackets-everywhere", "met[xX[x]alli]ca", NULL, "metallica" },
+ /* This value found by fuzz testing, see https://gitlab.gnome.org/GNOME/libmediaart/-/merge_requests/5 */
+ { "invalid-utf8-1", "\x0a\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1\xc1", NULL, "" },
{ NULL, NULL, NULL, NULL }
};