diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2020-12-27 13:47:36 +0100 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2020-12-27 14:01:40 +0100 |
commit | 517a22dcf6dcb9226fdfc805dedcca3febf06cf5 (patch) | |
tree | cceba73eb6339d73e84497fba86fc61727d59590 /libmediaart | |
parent | 265e27beb06945503422845f460cadadaab6b675 (diff) | |
download | libmediaart-517a22dcf6dcb9226fdfc805dedcca3febf06cf5.tar.gz |
Rationalize NULL/empty string handling in media_art_strip_invalid_entities()
We return NULL if input is NULL and a newly allocated empty string if
input is "". Some comments disagreed with this, and it's possible the
change causes a memory leak in some app, but the alternative of returning
NULL when passed "" is dangerous as some code may free the return value
in this case. (In fact, libmediaart itself does so).
Also, make behaviour occur independently of whether
`G_ENABLE_CONSISTENCY_CHECKS` was defined at build time.
Diffstat (limited to 'libmediaart')
-rw-r--r-- | libmediaart/cache.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libmediaart/cache.c b/libmediaart/cache.c index ecbc7a1..b5b023b 100644 --- a/libmediaart/cache.c +++ b/libmediaart/cache.c @@ -101,7 +101,7 @@ media_art_strip_find_next_block (const gchar *original, /** * media_art_strip_invalid_entities: - * @original: original string + * @original: (nullable): original string * * Strip a albumname or artistname string to prepare it for calculating the * media art path with it. Certain characters and charactersets will be stripped @@ -116,7 +116,7 @@ media_art_strip_find_next_block (const gchar *original, * 3. Multiples of space characters are removed. * * Returns: @original stripped of invalid characters which must be - * freed. On error or if @original is empty, %NULL is returned. + * freed. On error or if @original is NULL, %NULL is returned. * * Since: 0.2.0 */ @@ -140,7 +140,8 @@ media_art_strip_invalid_entities (const gchar *original) { 0, 0 } }; - g_return_val_if_fail (original != NULL, NULL); + if (original == NULL) + return NULL; str_no_blocks = g_string_new (""); @@ -284,6 +285,10 @@ media_art_get_file (const gchar *artist, /* http://live.gnome.org/MediaArtStorageSpec */ + g_return_val_if_fail (!artist || g_utf8_validate (artist, -1, NULL), FALSE); + g_return_val_if_fail (!title || g_utf8_validate (title, -1, NULL), FALSE); + g_return_val_if_fail (!prefix || g_utf8_validate (prefix, -1, NULL), FALSE); + if (cache_file) { *cache_file = NULL; } @@ -381,6 +386,10 @@ media_art_get_path (const gchar *artist, { GFile *cache_file = NULL; + g_return_val_if_fail (!artist || g_utf8_validate (artist, -1, NULL), FALSE); + g_return_val_if_fail (!title || g_utf8_validate (title, -1, NULL), FALSE); + g_return_val_if_fail (!prefix || g_utf8_validate (prefix, -1, NULL), FALSE); + /* Rules: * 1. artist OR title must be non-NULL. * 2. cache_file must be non-NULL @@ -424,6 +433,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 (!album || g_utf8_validate (album, -1, NULL), FALSE); dirname = g_build_filename (g_get_user_cache_dir (), "media-art", NULL); |