raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=d61b3f2d55ad40c59a9d0dd0d91dcbc4a6bda342

commit d61b3f2d55ad40c59a9d0dd0d91dcbc4a6bda342
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Fri Nov 20 11:23:08 2020 +0000

    music-control - fix handling of partial or broken xesam data
    
    we didnt chekc returns of eina value... this checks. fixes a crash
    with spotify - i think...
    
    @fix
---
 src/modules/music-control/e_mod_main.c | 102 ++++++++++++++++++++-------------
 1 file changed, 61 insertions(+), 41 deletions(-)

diff --git a/src/modules/music-control/e_mod_main.c 
b/src/modules/music-control/e_mod_main.c
index df30ca0c9..85f66c51d 100644
--- a/src/modules/music-control/e_mod_main.c
+++ b/src/modules/music-control/e_mod_main.c
@@ -230,52 +230,72 @@ parse_metadata(E_Music_Control_Module_Context *ctxt, 
Eina_Value *array)
    // DBG("Metadata: %s", eina_value_to_string(array));
    for (i = 0; i < eina_value_array_count(array); i++)
      {
-        const char *key, *str_val;
+        const char *key = NULL, *str_val;
         char *str_markup;
         Eina_Value st, subst;
         Efreet_Uri *uri;
 
-        eina_value_array_value_get(array, i, &st);
-        eina_value_struct_get(&st, "arg0", &key);
-        if (!strcmp(key, "xesam:title"))
+        eina_value_setup(&st, EINA_VALUE_TYPE_UINT64);
+        eina_value_setup(&subst, EINA_VALUE_TYPE_UINT64);
+        if (eina_value_array_value_get(array, i, &st) &&
+            eina_value_struct_get(&st, "arg0", &key))
           {
-             eina_value_struct_value_get(&st, "arg1", &subst);
-             eina_value_struct_get(&subst, "arg0", &str_val);
-             str_markup = evas_textblock_text_utf8_to_markup(NULL, str_val);
-             ctxt->meta_title = eina_stringshare_add(str_markup);
-             free(str_markup);
-             eina_value_flush(&subst);
-          }
-        else if (!strcmp(key, "xesam:album"))
-          {
-             eina_value_struct_value_get(&st, "arg1", &subst);
-             eina_value_struct_get(&subst, "arg0", &str_val);
-             str_markup = evas_textblock_text_utf8_to_markup(NULL, str_val);
-             ctxt->meta_album = eina_stringshare_add(str_markup);
-             free(str_markup);
-             eina_value_flush(&subst);
-          }
-        else if (!strcmp(key, "xesam:artist"))
-          {
-             Eina_Value arr;
-             eina_value_struct_value_get(&st, "arg1", &subst);
-             eina_value_struct_value_get(&subst, "arg0", &arr);
-             eina_value_array_get(&arr, 0, &str_val);
-             str_markup = evas_textblock_text_utf8_to_markup(NULL, str_val);
-             ctxt->meta_artist = eina_stringshare_add(str_markup);
-             free(str_markup);
-             eina_value_flush(&arr);
-             eina_value_flush(&subst);
-          }
-        else if (!strcmp(key, "mpris:artUrl"))
-          {
-             eina_value_struct_value_get(&st, "arg1", &subst);
-             eina_value_struct_get(&subst, "arg0", &str_val);
-             uri = efreet_uri_decode(str_val);
-             if (uri && !strncmp(uri->protocol, "file", 4))
-               ctxt->meta_cover = eina_stringshare_add(uri->path);
-             E_FREE_FUNC(uri, efreet_uri_free);
-             eina_value_flush(&subst);
+             if (!strcmp(key, "xesam:title"))
+               {
+                  if (eina_value_struct_value_get(&st, "arg1", &subst) &&
+                      eina_value_struct_get(&subst, "arg0", &str_val))
+                    {
+                       if ((str_markup = 
evas_textblock_text_utf8_to_markup(NULL, str_val)))
+                         {
+                            ctxt->meta_title = 
eina_stringshare_add(str_markup);
+                            free(str_markup);
+                         }
+                    }
+                  eina_value_flush(&subst);
+               }
+             else if (!strcmp(key, "xesam:album"))
+               {
+                  if (eina_value_struct_value_get(&st, "arg1", &subst) &&
+                      eina_value_struct_get(&subst, "arg0", &str_val))
+                    {
+                       if ((str_markup = 
evas_textblock_text_utf8_to_markup(NULL, str_val)))
+                         {
+                            ctxt->meta_album = 
eina_stringshare_add(str_markup);
+                            free(str_markup);
+                         }
+                    }
+                  eina_value_flush(&subst);
+               }
+             else if (!strcmp(key, "xesam:artist"))
+               {
+                  Eina_Value arr;
+
+                  eina_value_setup(&arr, EINA_VALUE_TYPE_UINT64);
+                  if (eina_value_struct_value_get(&st, "arg1", &subst) &&
+                      eina_value_struct_value_get(&subst, "arg0", &arr) &&
+                      eina_value_array_get(&arr, 0, &str_val))
+                    {
+                       if ((str_markup = 
evas_textblock_text_utf8_to_markup(NULL, str_val)))
+                         {
+                            ctxt->meta_artist = 
eina_stringshare_add(str_markup);
+                            free(str_markup);
+                         }
+                    }
+                  eina_value_flush(&arr);
+                  eina_value_flush(&subst);
+               }
+             else if (!strcmp(key, "mpris:artUrl"))
+               {
+                  if (eina_value_struct_value_get(&st, "arg1", &subst) &&
+                      eina_value_struct_get(&subst, "arg0", &str_val))
+                    {
+                       uri = efreet_uri_decode(str_val);
+                       if (uri && !strncmp(uri->protocol, "file", 4))
+                         ctxt->meta_cover = eina_stringshare_add(uri->path);
+                       E_FREE_FUNC(uri, efreet_uri_free);
+                    }
+                  eina_value_flush(&subst);
+               }
           }
         eina_value_flush(&st);
      }

-- 


Reply via email to