wl_desktop_shell: check if NULL before accessing wl_resource of xdg_surface/shell_sur... 09/63909/1 accepted/tizen/common/20160329.051032 accepted/tizen/ivi/20160329.003516 accepted/tizen/mobile/20160329.003430 accepted/tizen/tv/20160329.003443 accepted/tizen/wearable/20160329.003458 submit/tizen/20160328.122317
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 28 Mar 2016 11:53:04 +0000 (20:53 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Mon, 28 Mar 2016 11:58:23 +0000 (20:58 +0900)
since xdg_surface can be destroyed by map/unmap state,
we should make sure whether wl_resource of xdg_surface is valid.

Change-Id: I8fe3ac0be957482f8a4855e70a748d69c909ac5e

src/modules/wl_desktop_shell/e_mod_main.c

index c8518c6d40cf4704771fadb56ed7fd18b9f46218..4f51de54db2c3cf3c22a2096419ebb1ce21fe65c 100644 (file)
@@ -421,6 +421,9 @@ static const struct wl_shell_surface_interface _e_shell_surface_interface =
 static void
 _e_shell_surface_configure_send(struct wl_resource *resource, uint32_t edges, int32_t width, int32_t height)
 {
+   if (!resource)
+     return;
+
    wl_shell_surface_send_configure(resource, edges, width, height);
 }
 
@@ -432,6 +435,9 @@ _e_shell_surface_configure(struct wl_resource *resource, Evas_Coord x, Evas_Coor
    /* DBG("WL_SHELL: Surface Configure: %d \t%d %d %d %d",  */
    /*     wl_resource_get_id(resource), x, y, w, h); */
 
+   if (!resource)
+     return;
+
    /* get the client for this resource */
    if (!(ec = wl_resource_get_user_data(resource)))
      {
@@ -467,6 +473,9 @@ _e_shell_surface_ping(struct wl_resource *resource)
    E_Client *ec;
    uint32_t serial;
 
+   if (!resource)
+     return;
+
    /* get the client for this resource */
    if (!(ec = wl_resource_get_user_data(resource)))
      {
@@ -485,6 +494,9 @@ _e_shell_surface_map(struct wl_resource *resource)
 {
    E_Client *ec;
 
+   if (!resource)
+     return;
+
    /* get the client for this resource */
    if (!(ec = wl_resource_get_user_data(resource)))
      {
@@ -509,6 +521,9 @@ _e_shell_surface_unmap(struct wl_resource *resource)
 {
    E_Client *ec;
 
+   if (!resource)
+     return;
+
    /* get the client for this resource */
    if (!(ec = wl_resource_get_user_data(resource)))
      {
@@ -611,6 +626,9 @@ _e_xdg_shell_surface_configure_send(struct wl_resource *resource, uint32_t edges
    /* DBG("XDG_SHELL: Surface Configure Send: %d \t%d %d\tEdges: %d", */
    /*     wl_resource_get_id(resource), width, height, edges); */
 
+   if (!resource)
+     return;
+
    /* get the client for this resource */
    if (!(ec = wl_resource_get_user_data(resource)))
      {
@@ -1009,6 +1027,9 @@ _e_xdg_shell_surface_configure(struct wl_resource *resource, Evas_Coord x, Evas_
    /* DBG("XDG_SHELL: Surface Configure: %d \t%d %d %d %d",  */
    /*     wl_resource_get_id(resource), x, y, w, h); */
 
+   if (!resource)
+     return;
+
    /* get the client for this resource */
    if (!(ec = wl_resource_get_user_data(resource)))
      {
@@ -1045,6 +1066,9 @@ _e_xdg_shell_surface_ping(struct wl_resource *resource)
    E_Client *ec;
    uint32_t serial;
 
+   if (!resource)
+     return;
+
    /* get the client for this resource */
    if (!(ec = wl_resource_get_user_data(resource)))
      {
@@ -1066,6 +1090,9 @@ _e_xdg_shell_surface_map(struct wl_resource *resource)
 {
    E_Client *ec;
 
+   if (!resource)
+     return;
+
    /* DBG("XDG_SHELL: Map Surface: %d", wl_resource_get_id(resource)); */
 
    TRACE_DS_BEGIN(SHELL:MAP);
@@ -1103,6 +1130,9 @@ _e_xdg_shell_surface_unmap(struct wl_resource *resource)
 
    /* DBG("XDG_SHELL: Unmap Surface: %d", wl_resource_get_id(resource)); */
 
+   if (!resource)
+     return;
+
    TRACE_DS_BEGIN(SHELL:UNMAP);
 
    /* get the client for this resource */