ecore_wl2_display: improved safety of ecore_wl2_display_sync. 98/292198/1
authorMichal Szczecinski <m.szczecinsk@partner.samsung.com>
Fri, 28 Apr 2023 16:32:51 +0000 (18:32 +0200)
committerMichal Szczecinski <m.szczecinsk@partner.samsung.com>
Fri, 28 Apr 2023 16:48:12 +0000 (18:48 +0200)
The "wl_display_sync" may return null value. In this case
wl_callback_add_listener behaviour is undefined.

Change-Id: Iad08537cb1dad7fc545579248f13dcdc7f063fa2

src/lib/ecore_wl2/ecore_wl2_display.c

index b1e9faf..a0639d4 100644 (file)
@@ -1558,7 +1558,9 @@ _ecore_wl2_display_dispatch_error(Ecore_Wl2_Display *ewd)
 EAPI void
 ecore_wl2_display_sync(Ecore_Wl2_Display *display)
 {
-   struct wl_callback *cb;
+   //TIZEN_ONLY(20230428) Improved safety of ecore_wl2_display_sync
+   struct wl_callback *cb = NULL;
+   //
    int last_dpy_err;
    int ret;
 
@@ -1567,6 +1569,15 @@ ecore_wl2_display_sync(Ecore_Wl2_Display *display)
 
    display->sync_ref_count++;
    cb = wl_display_sync(display->wl.display);
+   //TIZEN_ONLY(20230428) Improved safety of ecore_wl2_display_sync
+   if (!cb)
+     {
+        errno = wl_display_get_error(display->wl.display);
+        ERR("Disconnected from a wayland compositor : %s", eina_error_msg_get(errno));
+        _ecore_wl2_signal_exit();
+        return;
+     }
+   //
    wl_callback_add_listener(cb, &_tz_sync_listener, display);
 
    while (display->sync_ref_count > 0)