Add NULL check code to prevent segmentation fault 81/39381/2
authorJihoon Kim <jihoon48.kim@samsung.com>
Thu, 14 May 2015 05:17:25 +0000 (14:17 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Thu, 14 May 2015 05:54:27 +0000 (14:54 +0900)
Change-Id: I6c548e7818f588d992831e4e745c38e1dbd53ce5

src/e_mod_input_panel.c
src/e_mod_main.c

index 61cbc6f..d8cadfa 100644 (file)
@@ -196,6 +196,14 @@ _e_input_panel_surface_map(struct wl_resource *resource)
         return;
      }
 
+   if (!ec->comp_data)
+     {
+        wl_resource_post_error(resource,
+                               WL_DISPLAY_ERROR_INVALID_OBJECT,
+                               "No Data For Client");
+        return;
+     }
+
    // NOTE: we need to set mapped, so that avoid showing evas_object and continue buffer's commit process.
    if ((!ec->comp_data->mapped) && (e_pixmap_usable_get(ec->pixmap)))
      ec->comp_data->mapped = EINA_TRUE;
@@ -227,7 +235,7 @@ _e_input_panel_surface_unmap(struct wl_resource *resource)
      {
         wl_resource_post_error(resource,
                                WL_DISPLAY_ERROR_INVALID_OBJECT,
-                               "No Client For Input Panel Surface");
+                               "No Data For Client");
         return;
      }
 
@@ -385,6 +393,8 @@ _e_input_panel_bind(struct wl_client *client, void *data, uint32_t version EINA_
    E_Input_Panel *input_panel = data;
    struct wl_resource *resource;
 
+   if (!input_panel) return;
+
    resource = wl_resource_create(client, &wl_input_panel_interface, 1, id);
 
    if (input_panel->resource == NULL)
@@ -448,6 +458,18 @@ e_input_panel_init(E_Comp_Data *cdata)
 void
 e_input_panel_shutdown(E_Comp_Data *cdata EINA_UNUSED)
 {
-   if (g_input_panel->resource) wl_resource_destroy(g_input_panel->resource);
-   if (g_input_panel->global) wl_global_destroy(g_input_panel->global);
+    if (g_input_panel)
+      {
+         if (g_input_panel->resource)
+           {
+              wl_resource_destroy(g_input_panel->resource);
+              g_input_panel->resource = NULL;
+           }
+
+         if (g_input_panel->global)
+           {
+              wl_global_destroy(g_input_panel->global);
+              g_input_panel->global = NULL;
+           }
+      }
 }
index cbf8f3f..5810aaf 100644 (file)
@@ -349,7 +349,8 @@ _e_text_input_deactivate(E_Text_Input *text_input, E_Input_Method *input_method)
 
         text_input->input_methods = eina_list_remove(text_input->input_methods, input_method);
 
-        wl_text_input_send_leave(text_input->resource);
+        if (text_input->resource)
+          wl_text_input_send_leave(text_input->resource);
      }
 }
 
@@ -410,7 +411,8 @@ _e_text_input_cb_activate(struct wl_client *client, struct wl_resource *resource
    if (text_input->input_panel_visibile)
      e_input_panel_visibility_change(EINA_TRUE);
 
-   wl_text_input_send_enter(text_input->resource, surface);
+   if (text_input->resource)
+     wl_text_input_send_enter(text_input->resource, surface);
 
    return;
 
@@ -526,7 +528,8 @@ _e_text_input_cb_reset(struct wl_client *client EINA_UNUSED, struct wl_resource
    EINA_LIST_FOREACH(text_input->input_methods, l, input_method)
      {
         if (!input_method->context) continue;
-        wl_input_method_context_send_reset(input_method->context->resource);
+        if (input_method->context->resource)
+          wl_input_method_context_send_reset(input_method->context->resource);
      }
 }
 
@@ -548,8 +551,9 @@ _e_text_input_cb_surrounding_text_set(struct wl_client *client EINA_UNUSED, stru
    EINA_LIST_FOREACH(text_input->input_methods, l, input_method)
      {
         if (!input_method->context) continue;
-        wl_input_method_context_send_surrounding_text(input_method->context->resource,
-                                                      text, cursor, anchor);
+        if (input_method->context->resource)
+          wl_input_method_context_send_surrounding_text(input_method->context->resource,
+                                                        text, cursor, anchor);
      }
 }
 
@@ -571,8 +575,10 @@ _e_text_input_cb_content_type_set(struct wl_client *client EINA_UNUSED, struct w
    EINA_LIST_FOREACH(text_input->input_methods, l, input_method)
      {
         if (!input_method->context) continue;
-        wl_input_method_context_send_content_type(input_method->context->resource,
-                                                  hint, purpose);
+
+        if (input_method->context->resource)
+          wl_input_method_context_send_content_type(input_method->context->resource,
+                                                    hint, purpose);
      }
 }
 
@@ -612,8 +618,10 @@ _e_text_input_cb_preferred_language_set(struct wl_client *client EINA_UNUSED, st
    EINA_LIST_FOREACH(text_input->input_methods, l, input_method)
      {
         if (!input_method->context) continue;
-        wl_input_method_context_send_preferred_language(input_method->context->resource,
-                                                        language);
+
+        if (input_method->context->resource)
+          wl_input_method_context_send_preferred_language(input_method->context->resource,
+                                                          language);
      }
 }
 
@@ -635,7 +643,9 @@ _e_text_input_cb_state_commit(struct wl_client *client EINA_UNUSED, struct wl_re
    EINA_LIST_FOREACH(text_input->input_methods, l, input_method)
      {
         if (!input_method->context) continue;
-        wl_input_method_context_send_commit_state(input_method->context->resource, serial);
+
+        if (input_method->context->resource)
+          wl_input_method_context_send_commit_state(input_method->context->resource, serial);
      }
 }
 
@@ -657,8 +667,10 @@ _e_text_input_cb_action_invoke(struct wl_client *client EINA_UNUSED, struct wl_r
    EINA_LIST_FOREACH(text_input->input_methods, l, input_method)
      {
         if (!input_method->context) continue;
-        wl_input_method_context_send_invoke_action(input_method->context->resource,
-                                                   button, index);
+
+        if (input_method->context->resource)
+          wl_input_method_context_send_invoke_action(input_method->context->resource,
+                                                     button, index);
      }
 }
 
@@ -693,7 +705,12 @@ _e_text_input_cb_destroy(struct wl_resource *resource)
    EINA_LIST_FREE(text_input->input_methods, input_method)
       _e_text_input_deactivate(text_input, input_method);
 
-   eina_rectangle_free(text_input->cursor_rect);
+   if (text_input->cursor_rect)
+     {
+        eina_rectangle_free(text_input->cursor_rect);
+        text_input->cursor_rect = NULL;
+     }
+
    free(text_input);
 }