e_blur: fix double-checked NPE and leaked storage issue 45/325145/1
authorhojoon-ryou <hojoon.ryou@samsung.com>
Mon, 26 May 2025 06:59:30 +0000 (15:59 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 4 Jun 2025 03:47:47 +0000 (12:47 +0900)
Change-Id: If1bec1a637a16fe9eb1ccfa5d198a4f3196a2ce9

src/bin/server/e_blur.c

index 274a1c5b873d3b655418f9d06113617077b329c0..3ea75ecdad2f9ad2086890e053b67d4fac415c3c 100644 (file)
@@ -1090,6 +1090,7 @@ static void
 _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
 {
    E_Blur_Behind *blur_behind;
+   E_Blur_Rectangle *blur_rectangle;
    E_Blur_Manager *blur_manager = _blur_manager;
    struct ds_tizen_blur_behind *tizen_blur_behind = data;
    struct ds_surface *surface;
@@ -1123,8 +1124,8 @@ _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
 
    blur_behind = E_NEW(E_Blur_Behind, 1);
    EINA_SAFETY_ON_NULL_RETURN(blur_behind);
-   blur_behind->blur_rectangle = E_NEW(E_Blur_Rectangle, 1);
-   EINA_SAFETY_ON_NULL_RETURN(blur_behind->blur_rectangle);
+   blur_rectangle = E_NEW(E_Blur_Rectangle, 1);
+   EINA_SAFETY_ON_NULL_RETURN(blur_rectangle);
 
    blur_behind->listener.destroy.notify = _e_blur_behind_cb_ds_tizen_blur_behind_destroy;
    ds_tizen_blur_behind_add_destroy_listener(tizen_blur_behind, &blur_behind->listener.destroy);
@@ -1136,23 +1137,24 @@ _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
 
    _e_blur_behind_ec_set(blur_behind, ec);
 
-   _e_blur_rectangle_view_image_new(blur_behind->blur_rectangle, view_client_tree, "blur_behind_obj");
-   EINA_SAFETY_ON_NULL_GOTO(blur_behind->blur_rectangle->view_image, fail);
-   image_view = e_view_image_view_get(blur_behind->blur_rectangle->view_image);
+   _e_blur_rectangle_view_image_new(blur_rectangle, view_client_tree, "blur_behind_obj");
+   EINA_SAFETY_ON_NULL_GOTO(blur_rectangle->view_image, fail);
+   image_view = e_view_image_view_get(blur_rectangle->view_image);
 
-   _e_blur_rectangle_dim_rect_new(blur_behind->blur_rectangle, view_client_tree, "blur_behind_dim_obj");
-   EINA_SAFETY_ON_NULL_GOTO(blur_behind->blur_rectangle->dim_rect, fail);
-   dim_view = e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect);
+   _e_blur_rectangle_dim_rect_new(blur_rectangle, view_client_tree, "blur_behind_dim_obj");
+   EINA_SAFETY_ON_NULL_GOTO(blur_rectangle->dim_rect, fail);
+   dim_view = e_view_rect_view_get(blur_rectangle->dim_rect);
 
    e_comp_size_get(&comp_w, &comp_h);
 
    // resize & place E_View_Objects
-   e_view_image_geometry_set(blur_behind->blur_rectangle->view_image, 0, 0, comp_w, comp_h);
+   e_view_image_geometry_set(blur_rectangle->view_image, 0, 0, comp_w, comp_h);
    e_view_position_set(dim_view, 0, 0);
-   e_view_rect_size_set(blur_behind->blur_rectangle->dim_rect, comp_w, comp_h);
+   e_view_rect_size_set(blur_rectangle->dim_rect, comp_w, comp_h);
    e_view_place_below(image_view, _e_blur_behind_bottom_view_get(e_view_client_view_get(view_client)));
    e_view_place_below(dim_view, image_view);
 
+   blur_behind->blur_rectangle = blur_rectangle;
    blur_manager->blurs_behind = eina_list_append(blur_manager->blurs_behind, blur_behind);
 
    ELOGF("E_BLUR", "E_Blur_Behind:%p Create", ec, blur_behind);
@@ -1163,11 +1165,8 @@ _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
    return;
 
 fail:
-   if (blur_behind->blur_rectangle)
-     {
-        _e_blur_rectangle_free(blur_behind->blur_rectangle);
-        blur_behind->blur_rectangle = NULL;
-     }
+   _e_blur_rectangle_free(blur_rectangle);
+   _e_blur_behind_free(blur_behind);
 }
 
 static void