From: Jihoon Kim Date: Thu, 21 May 2015 03:43:52 +0000 (+0900) Subject: Prevent crash due to NULL value X-Git-Tag: submit/tizen/20150525.234615~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4078d5e11d03df6face7a7cffe829fab057597c9;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-wl-textinput.git Prevent crash due to NULL value Change-Id: Ie9e7a93d80730295e89a3dc006f312d520bac426 --- diff --git a/src/e_mod_input_panel.c b/src/e_mod_input_panel.c index 3064f77..27e4660 100644 --- a/src/e_mod_input_panel.c +++ b/src/e_mod_input_panel.c @@ -31,7 +31,7 @@ static void _e_input_panel_surface_cb_toplevel_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *output_resource EINA_UNUSED, uint32_t position EINA_UNUSED) { E_Input_Panel_Surface *ips = wl_resource_get_user_data(resource); - E_Input_Panel *input_panel = ips->input_panel; + E_Input_Panel *input_panel = NULL; if (!ips) { @@ -41,6 +41,8 @@ _e_input_panel_surface_cb_toplevel_set(struct wl_client *client EINA_UNUSED, str return; } + if (!(input_panel = ips->input_panel)) return; + input_panel->surfaces = eina_list_append(input_panel->surfaces, ips); ips->panel = EINA_FALSE; } @@ -49,7 +51,7 @@ static void _e_input_panel_surface_cb_overlay_panel_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource) { E_Input_Panel_Surface *ips = wl_resource_get_user_data(resource); - E_Input_Panel *input_panel = ips->input_panel; + E_Input_Panel *input_panel = NULL; if (!ips) { @@ -59,6 +61,8 @@ _e_input_panel_surface_cb_overlay_panel_set(struct wl_client *client EINA_UNUSED return; } + if (!(input_panel = ips->input_panel)) return; + input_panel->surfaces = eina_list_append(input_panel->surfaces, ips); ips->panel = EINA_TRUE; } @@ -72,8 +76,8 @@ static void _e_input_panel_surface_resource_destroy(struct wl_resource *resource) { E_Input_Panel_Surface *ips = wl_resource_get_user_data(resource); - E_Input_Panel *input_panel; - E_Client *ec; + E_Input_Panel *input_panel = NULL; + E_Client *ec = NULL; if (!ips) { @@ -117,6 +121,8 @@ _e_input_panel_position_set(E_Client *ec, int w, int h) int nx, ny; int zx, zy, zw, zh; + if (!ec) return; + e_zone_useful_geometry_get(ec->zone, &zx, &zy, &zw, &zh); nx = zx + (zw - w) / 2; @@ -214,8 +220,8 @@ _e_input_panel_surface_map(struct wl_resource *resource) static void _e_input_panel_surface_unmap(struct wl_resource *resource) { - E_Input_Panel_Surface *ips; - E_Client *ec; + E_Input_Panel_Surface *ips = NULL; + E_Client *ec = NULL; if (!(ips = wl_resource_get_user_data(resource))) { @@ -256,9 +262,9 @@ _e_input_panel_cb_surface_get(struct wl_client *client, struct wl_resource *reso { E_Input_Panel *input_panel = wl_resource_get_user_data(resource); E_Pixmap *ep = wl_resource_get_user_data(surface_resource); - E_Input_Panel_Surface *ips; - E_Comp_Client_Data *cdata; - E_Client *ec; + E_Input_Panel_Surface *ips = NULL; + E_Comp_Client_Data *cdata = NULL; + E_Client *ec = NULL; if (!input_panel) { @@ -401,6 +407,7 @@ _e_input_panel_bind(struct wl_client *client, void *data, uint32_t version EINA_ if (!input_panel) return; resource = wl_resource_create(client, &wl_input_panel_interface, 1, id); + if (!resource) return; if (input_panel->resource == NULL) { @@ -439,7 +446,7 @@ e_input_panel_init(E_Comp_Data *cdata) { if (!cdata) return EINA_FALSE; - if (!(g_input_panel= E_NEW(E_Input_Panel, 1))) + if (!(g_input_panel = E_NEW(E_Input_Panel, 1))) { // ERR("Failed to allocate space for E_Input_Panel"); return EINA_FALSE; diff --git a/src/e_mod_main.c b/src/e_mod_main.c index bf84950..48bdee9 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -358,10 +358,10 @@ _e_text_input_deactivate(E_Text_Input *text_input, E_Input_Method *input_method) static void _e_text_input_cb_activate(struct wl_client *client, struct wl_resource *resource, struct wl_resource *seat, struct wl_resource *surface) { - E_Text_Input *text_input; - E_Input_Method *input_method; - E_Text_Input *old; - E_Input_Method_Context *context; + E_Text_Input *text_input = NULL; + E_Input_Method *input_method = NULL; + E_Text_Input *old = NULL; + E_Input_Method_Context *context = NULL; EINA_SAFETY_ON_NULL_GOTO(resource, err); EINA_SAFETY_ON_NULL_GOTO(seat, err); @@ -430,7 +430,7 @@ _e_text_input_cb_deactivate(struct wl_client *client EINA_UNUSED, struct wl_reso { E_Text_Input *text_input = wl_resource_get_user_data(resource); E_Comp_Data *cdata = wl_resource_get_user_data(seat); - E_Input_Method *input_method; + E_Input_Method *input_method = NULL; if (!text_input) { @@ -449,7 +449,10 @@ _e_text_input_cb_deactivate(struct wl_client *client EINA_UNUSED, struct wl_reso } // FIXME: should get input_method object from seat. - if (!(input_method = wl_resource_get_user_data(g_input_method->resource))) + if (g_input_method && g_input_method->resource) + input_method = wl_resource_get_user_data(g_input_method->resource); + + if (!input_method) { wl_resource_post_error(seat, WL_DISPLAY_ERROR_INVALID_OBJECT, @@ -464,8 +467,8 @@ static void _e_text_input_cb_input_panel_show(struct wl_client *client EINA_UNUSED, struct wl_resource *resource) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -488,8 +491,8 @@ static void _e_text_input_cb_input_panel_hide(struct wl_client *client EINA_UNUSED, struct wl_resource *resource) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -503,7 +506,7 @@ _e_text_input_cb_input_panel_hide(struct wl_client *client EINA_UNUSED, struct w EINA_LIST_FOREACH(text_input->input_methods, l, input_method) { - if (input_method->model == text_input) + if (input_method && (input_method->model == text_input)) e_input_panel_visibility_change(EINA_FALSE); } } @@ -512,8 +515,8 @@ static void _e_text_input_cb_reset(struct wl_client *client EINA_UNUSED, struct wl_resource *resource) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -525,7 +528,7 @@ _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; + if (!input_method || !input_method->context) continue; if (input_method->context->resource) wl_input_method_context_send_reset(input_method->context->resource); } @@ -535,8 +538,8 @@ static void _e_text_input_cb_surrounding_text_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, const char *text, uint32_t cursor, uint32_t anchor) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -548,7 +551,7 @@ _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; + if (!input_method || !input_method->context) continue; if (input_method->context->resource) wl_input_method_context_send_surrounding_text(input_method->context->resource, text, cursor, anchor); @@ -559,8 +562,8 @@ static void _e_text_input_cb_content_type_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t hint, uint32_t purpose) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -572,7 +575,7 @@ _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; + if (!input_method || !input_method->context) continue; if (input_method->context->resource) wl_input_method_context_send_content_type(input_method->context->resource, @@ -602,8 +605,8 @@ static void _e_text_input_cb_preferred_language_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, const char *language) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -615,7 +618,7 @@ _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; + if (!input_method || !input_method->context) continue; if (input_method->context->resource) wl_input_method_context_send_preferred_language(input_method->context->resource, @@ -627,8 +630,8 @@ static void _e_text_input_cb_state_commit(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t serial) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -640,7 +643,7 @@ _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; + if (!input_method || !input_method->context) continue; if (input_method->context->resource) wl_input_method_context_send_commit_state(input_method->context->resource, serial); @@ -651,8 +654,8 @@ static void _e_text_input_cb_action_invoke(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t button, uint32_t index) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; - Eina_List *l; + E_Input_Method *input_method = NULL; + Eina_List *l = NULL; if (!text_input) { @@ -664,7 +667,7 @@ _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; + if (!input_method || !input_method->context) continue; if (input_method->context->resource) wl_input_method_context_send_invoke_action(input_method->context->resource, @@ -690,7 +693,7 @@ static void _e_text_input_cb_destroy(struct wl_resource *resource) { E_Text_Input *text_input = wl_resource_get_user_data(resource); - E_Input_Method *input_method; + E_Input_Method *input_method = NULL; if (!text_input) { @@ -718,7 +721,7 @@ static void _e_text_input_manager_cb_text_input_create(struct wl_client *client, struct wl_resource *resource, uint32_t id) { E_Text_Input_Mgr *text_input_mgr = wl_resource_get_user_data(resource); - E_Text_Input *text_input; + E_Text_Input *text_input = NULL; if (!text_input_mgr) { @@ -796,7 +799,7 @@ static void _e_text_cb_bind_input_method(struct wl_client *client, void *data, uint32_t version EINA_UNUSED, uint32_t id) { E_Input_Method *input_method = data; - struct wl_resource *resource; + struct wl_resource *resource = NULL; if (!input_method) return; @@ -856,6 +859,7 @@ static void _e_text_input_manager_destroy(void *data) { E_Text_Input_Mgr *text_input_mgr = data; + if (!text_input_mgr) return; wl_global_destroy(text_input_mgr->global); free(text_input_mgr); @@ -908,7 +912,7 @@ EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Wl_Text_Input" }; EAPI void * e_modapi_init(E_Module *m) { - E_Comp_Data *cdata; + E_Comp_Data *cdata = NULL; if (!e_comp) return NULL;