heap-use-after-free when hiding and showing desktop icons

Issue Description

This crash bisects to commit 90a6ae3e.

Steps to Reproduce Issue

  1. Right-click on the desktop and select "Desktop Settings"
  2. Select the "Desktop Icons" tab
  3. Change the Icon type to "None"
  4. Change the Icon type to "File/launcher icons" to trigger a use-after-free

Expected Behavior

No memory errors

Additional Information

ERROR: AddressSanitizer: heap-use-after-free on address 0x7c790a66e2a0 at pc 0x7f4910c23082
READ of size 8 at 0x7c790a66e2a0 thread T0
    #0 0x7f4910c23081 in gtk_container_remove gtk3/gtk/gtkcontainer.c:1902:3
    #1 0x55a3d762c670 in xfce_desktop_put_to_layer xfdesktop/src/xfce-desktop.c:1505:13
    #2 0x55a3d769d2f3 in init_for_x11 xfdesktop/src/xfdesktop-icon-view-holder.c:124:5
    #3 0x55a3d769d2f3 in xfdesktop_icon_view_holder_new xfdesktop/src/xfdesktop-icon-view-holder.c:228:9
    #4 0x55a3d76ba3e9 in create_icon_view xfdesktop/src/xfdesktop-file-icon-manager.c:1389:21
    #5 0x55a3d76ba3e9 in xfdesktop_file_icon_manager_desktop_added xfdesktop/src/xfdesktop-file-icon-manager.c:1531:5
    #6 0x55a3d76b8895 in xfdesktop_file_icon_manager_constructed xfdesktop/src/xfdesktop-file-icon-manager.c:521:9
    #7 0x7f4911d27af1 in g_object_new_internal glib/gobject/gobject.c:2716:5
    #8 0x7f4911d26c6f in g_object_new_valist glib/gobject/gobject.c:3004:16
    #9 0x7f4911d2578b in g_object_new glib/gobject/gobject.c:2479:12
    #10 0x55a3d76b760c in xfdesktop_file_icon_manager_new xfdesktop/src/xfdesktop-file-icon-manager.c:3711:12
    #11 0x55a3d7637ce5 in xfdesktop_application_set_icon_style xfdesktop/src/xfdesktop-application.c:1514:38
    #12 0x55a3d7635914 in xfdesktop_application_set_property xfdesktop/src/xfdesktop-application.c:341:13
[...snip...]

0x7c790a66e2a0 is located 288 bytes inside of 336-byte region [0x7c790a66e180,0x7c790a66e2d0)
freed by thread T0 here:
    #0 0x7f4912d74a6d  (/usr/lib/clang/21/lib/linux/libclang_rt.asan-x86_64.so+0x174a6d)
    #1 0x7f491199deb8 in g_free_sized glib/glib/gmem.c:236:3
    #2 0x7f4911d8ae52 in g_type_free_instance glib/gobject/gtype.c:1979:5
    #3 0x7f4911d23cd1 in g_object_unref glib/gobject/gobject.c:4921:3
    #4 0x7f4911d22b0e in g_object_run_dispose glib/gobject/gobject.c:1923:3
    #5 0x7f4911110e47 in gtk_widget_destroy gtk3/gtk/gtkwidget.c:4787:5
    #6 0x55a3d769ebd3 in xfdesktop_icon_view_holder_finalize xfdesktop/src/xfdesktop-icon-view-holder.c:66:5
    #7 0x7f4911d23bfe in g_object_unref glib/gobject/gobject.c:4905:3
    #8 0x55a3d76cfe73 in monitor_data_free xfdesktop/src/xfdesktop-file-icon-manager.c:170:5
    #9 0x7f49119105b2 in g_hash_table_remove_all_nodes glib/glib/ghash.c:665:13
    #10 0x7f49119111c1 in g_hash_table_remove_all glib/glib/ghash.c:1880:3
    #11 0x7f4911911122 in g_hash_table_destroy glib/glib/ghash.c:1471:3
    #12 0x55a3d76b9a6f in xfdesktop_file_icon_manager_dispose xfdesktop/src/xfdesktop-file-icon-manager.c:604:5
    #13 0x7f4911d23760 in g_object_unref glib/gobject/gobject.c:4834:3
    #14 0x55a3d7637a58 in xfdesktop_application_set_icon_style xfdesktop/src/xfdesktop-application.c:1495:5
    #15 0x55a3d7635914 in xfdesktop_application_set_property xfdesktop/src/xfdesktop-application.c:341:13
[...snip...]

previously allocated by thread T0 here:
    #0 0x7f4912d75d6d in calloc
    #1 0x7f491199ddfa in g_malloc0 glib/glib/gmem.c:133:13
    #2 0x7f4911d892e1 in g_type_create_instance glib/gobject/gtype.c:1882:17
    #3 0x7f4911d27715 in g_object_new_internal glib/gobject/gobject.c:2666:24
    #4 0x7f4911d257cb in g_object_new_with_properties glib/gobject/gobject.c:2828:14
    #5 0x7f4911d257cb in g_object_new glib/gobject/gobject.c:2476:12
    #6 0x7f4910d38f63 in gtk_fixed_new gtk3/gtk/gtkfixed.c:196:10
    #7 0x55a3d769d26b in init_for_x11 xfdesktop/src/xfdesktop-icon-view-holder.c:121:25
    #8 0x55a3d769d26b in xfdesktop_icon_view_holder_new xfdesktop/src/xfdesktop-icon-view-holder.c:228:9
    #9 0x55a3d76ba3e9 in create_icon_view xfdesktop/src/xfdesktop-file-icon-manager.c:1389:21
    #10 0x55a3d76ba3e9 in xfdesktop_file_icon_manager_desktop_added xfdesktop/src/xfdesktop-file-icon-manager.c:1531:5
    #11 0x55a3d76b8895 in xfdesktop_file_icon_manager_constructed xfdesktop/src/xfdesktop-file-icon-manager.c:521:9
    #12 0x7f4911d27af1 in g_object_new_internal glib/gobject/gobject.c:2716:5
    #13 0x7f4911d26c6f in g_object_new_valist glib/gobject/gobject.c:3004:16
    #14 0x7f4911d2578b in g_object_new glib/gobject/gobject.c:2479:12
    #15 0x55a3d76b760c in xfdesktop_file_icon_manager_new xfdesktop/src/xfdesktop-file-icon-manager.c:3711:12
    #16 0x55a3d7637ce5 in xfdesktop_application_set_icon_style xfdesktop/src/xfdesktop-application.c:1514:38
    #17 0x55a3d7635914 in xfdesktop_application_set_property xfdesktop/src/xfdesktop-application.c:341:13
[...snip...]

Environment & Versions

  • OS distribution and version: Arch Linux
  • Overall Xfce version: 4.21
  • xfdesktop version (git hash if not a release): efe24d8d
  • thunar version (if issue related to file/launcher icons): cff7db0b0a
  • Windowing system (X11/Wayland): X11
  • Compositor and version (if Wayland): N/A
  • GTK Theme: Adwaita
  • Icon Theme: elementary
  • UI Scale Factor: 1x