diff options
author | Logan Rathbone <poprocks@gmail.com> | 2022-05-04 16:23:03 -0400 |
---|---|---|
committer | Logan Rathbone <poprocks@gmail.com> | 2022-05-04 21:04:25 -0400 |
commit | 596d09a78fe1138e1ec4cba56b269631985e6b74 (patch) | |
tree | a0ab67ef99c55d81df5963c66b605e395f9a1278 | |
parent | f5b9619b2fe2968f6f95df75d5e58c574f4568fe (diff) | |
download | libnotify-596d09a78fe1138e1ec4cba56b269631985e6b74.tar.gz |
notification: Bookend calling NotifyActionCallback with temporary ref
Starting with d0778595, we access the Notification object after the
NotifyActionCallback; some clients (eg, Electron) have historically
unref'd the object at the end of the NotifyActionCallback. They probably
should not have been doing so, but this hotfix adds an additional ref
before and after the callback so that we don't break existing code.
Fixes #25
-rw-r--r-- | libnotify/notification.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libnotify/notification.c b/libnotify/notification.c index 482ee3e..18d7203 100644 --- a/libnotify/notification.c +++ b/libnotify/notification.c @@ -739,12 +739,19 @@ proxy_g_signal_cb (GDBusProxy *proxy, g_warning ("Received unknown action %s", action); } } else { + /* Some clients have assumed it is safe to unref the + * Notification at the end of their NotifyActionCallback + * so we add a temporary ref until we're done with it. + */ + g_object_ref (notification); + notification->priv->activating = TRUE; pair->cb (notification, (char *) action, pair->user_data); notification->priv->activating = FALSE; - g_free (notification->priv->activation_token); notification->priv->activation_token = NULL; + + g_object_unref (notification); } } else if (g_strcmp0 (signal_name, "ActivationToken") == 0 && g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(us)"))) { |