Cinnamon: Crash du démon de notification lorsque l'indice `image-path` contient un nom d'icône

Créé le 21 avr. 2018  ·  3Commentaires  ·  Source: linuxmint/cinnamon

```

  • Cannelle Cannelle 3.6.7
  • Distribution Linux Mint 18.3 Sylvia
  • 64 bits
    ```

Publier

Le démon de notification ne prend pas en charge les noms d'icônes.

Côté application, j'utilise GApplication pour envoyer des notifications. J'ai mis une icône en utilisant ce genre de code :

icon = g_themed_icon_new("edit-copy");
g_notification_set_icon(notif, icon);
g_application_send_notification(app, "notif-id", notif);

Ce code plantera essentiellement mon application. Le plantage est dû à un bogue dans glib, qui est déclenché parce que send_notification() expire. Il expire car le démon de notification Cinnamon ne répond plus et s'est probablement également écrasé.

J'ai suivi ça autant que j'ai pu. Du côté de l'appelant d'abord (c'est-à-dire la glib), nous pouvons voir que la prise en charge de GThemedIcon a été discutée dans le bogue 745634 , et ajoutée dans la glib ec1edef3 .

Maintenant, si vous regardez dans ce fichier, vous pouvez voir que l'implémentation enregistrera finalement l'icône dans l'indice image-path . Ce qui nous amène aux étapes pour reproduire...

Étapes à reproduire

Nous pouvons donc recréer l'appel dbus envoyé par g_application_send_notification() . Quant à l'image, nous pouvons soit utiliser un chemin complet (c'est ce que vous obtenez si l'appelant a utilisé GFileIcon), soit simplement le nom du fichier sans l'extension (c'est ce que vous obtenez si l'appelant a utilisé GThemedIcon).

La définition d'un chemin complet fonctionne :

IMAGE=/usr/share/icons/Adwaita/48x48/actions/edit-copy.png
python -c "import dbus; print dbus.Bus().call_blocking(\
    'org.freedesktop.Notifications', \
    '/org/freedesktop/Notifications', \
    'org.freedesktop.Notifications', \
    'Notify', \
    'susssasa{sv}i', \
    ('appname', 0, '', 'summary', 'body', [], {'image-path': '$IMAGE'}, -1))"

La définition d'un nom d'icône ne fonctionne pas, aucune notification n'est affichée :

IMAGE=edit-copy
python -c ... # copy-paste the snippet above

Les autres informations

C'est à vous de décider si vous souhaitez prendre en charge l'icône thématique ou non dans votre démon de notification, mais au moins le démon de notification devrait gérer avec élégance toute entrée indésirable envoyée par les applications dans l'indice image-path .

J'ai ajouté quelques logs dans le Javascript Cinnamon, et je me suis retrouvé ici dans le fichier js/ui/notificationDaemon.js :

       } else if (hints['image-path']) {
           return textureCache.load_uri_async(GLib.filename_to_uri(hints['image-path'], null), size, size);

Cet appel ne revient jamais car GLib.filename_to_uri lève une exception qui n'est pas gérée. J'ai remarqué qu'il y a quelques-uns de cet appel dans le fichier, où les exceptions ne sont pas gérées.

J'ai ajouté une déclaration try catch , mais la notification ne s'affiche toujours pas. Je ne suis pas allé plus loin.

J'espère que cela vous aidera, n'hésitez pas à me contacter pour plus de détails. Acclamations,

Arnaud

BUG BUG REPRODUCED

Commentaire le plus utile

@icarter09 Oui, c'est toujours un problème ici, fedora utilise @itzexor WIP pour le résoudre

https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f

Tous les 3 commentaires

@elboulangero rencontrez-vous toujours ce problème ?

@icarter09 Désolé, je ne l'ai découvert qu'en effectuant des tests dans une machine virtuelle Cinnamon, après qu'un utilisateur a signalé un plantage avec Goodvibes sur Cinnamon. Je ne dirige pas Cinnamon moi-même, donc je ne peux pas le dire.

Cela étant dit, je pense que vous pouvez essayer les "Étapes à reproduire" ci-dessus pour voir si le problème persiste.

à votre santé

@icarter09 Oui, c'est toujours un problème ici, fedora utilise @itzexor WIP pour le résoudre

https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f

Cette page vous a été utile?
0 / 5 - 0 notes