Null pointer dereference of item in exo_icon_view_get_item_needed_size when pressing End whilst Thunar is loading directory content
Version information
exo 4.20.0-2 and thunar 4.20.2-1 on Arch Linux.
To make sure the crash isn't caused by some configuration or plugin, I did a fresh Arch installation with their archinstall tool, Type -> Desktop -> i3wm, then pacman -S thunar.
Steps to reproduce
- Open Thunar and select any directory. Empty directory works too.
- Press Return to enter the directory and immediately press End whilst Thunar is loading the directory content.
(to reproduce easier, mount a network drive or get a storage device with slow I/O, then you'll have more time to press End)
Current behaviour
Thunar crashes.
Expected outcome
Thunar displays the directory, scrolled to the bottom, with the last file selected, if any.
Backtrace
Thread 1 "thunar" received signal SIGSEGV, Segmentation fault.
0x00007ffff7f89f88 in exo_icon_view_get_item_needed_size (icon_view=0x5555558fd990, item=0x0, width=<synthetic pointer>, height=<synthetic pointer>) at /usr/src/debug/exo/exo/exo/exo-icon-view.c:4816
4816 *width += item->box[info->position].width
(gdb) bt
#0 0x00007ffff7f89f88 in exo_icon_view_get_item_needed_size (icon_view=0x5555558fd990, item=0x0, width=<synthetic pointer>, height=<synthetic pointer>) at /usr/src/debug/exo/exo/exo/exo-icon-view.c:4816
#1 exo_icon_view_scroll_to_item (icon_view=0x5555558fd990, item=0x0) at /usr/src/debug/exo/exo/exo/exo-icon-view.c:4864
#2 0x00007ffff7f8c019 in exo_icon_view_move_cursor_start_end (icon_view=<optimized out>, count=<optimized out>) at /usr/src/debug/exo/exo/exo/exo-icon-view.c:4785
#3 exo_icon_view_real_move_cursor (icon_view=0x5555558fd990, step=<optimized out>, count=<optimized out>) at /usr/src/debug/exo/exo/exo/exo-icon-view.c:4215
#4 exo_icon_view_real_move_cursor (icon_view=icon_view@entry=0x5555558fd990, step=<optimized out>, count=<optimized out>) at /usr/src/debug/exo/exo/exo/exo-icon-view.c:4173
#5 0x00007ffff7f7c986 in _exo_marshal_BOOLEAN__ENUM_INT (n_param_values=<optimized out>, invocation_hint=<optimized out>, closure=0x555555805bd0, return_value=0x7fffffffd740, param_values=0x5555559ed7c0, marshal_data=<optimized out>) at /usr/src/debug/exo/exo/exo/exo-marshal.c:275
#6 _exo_marshal_BOOLEAN__ENUM_INT (closure=0x555555805bd0, return_value=0x7fffffffd740, n_param_values=<optimized out>, param_values=0x5555559ed7c0, invocation_hint=<optimized out>, marshal_data=<optimized out>) at /usr/src/debug/exo/exo/exo/exo-marshal.c:244
#7 0x00007ffff71e582a in g_closure_invoke (closure=0x555555805bd0, return_value=0x7fffffffd740, n_param_values=3, param_values=0x5555559ed7c0, invocation_hint=0x7fffffffd520) at ../glib/gobject/gclosure.c:833
#8 0x00007ffff7216b62 in signal_emit_unlocked_R.isra.0 (node=<optimized out>, detail=detail@entry=0, instance=instance@entry=0x5555558fd990, emission_return=emission_return@entry=0x7fffffffd740, instance_and_params=instance_and_params@entry=0x5555559ed7c0) at ../glib/gobject/gsignal.c:3927
#9 0x00007ffff7203a2c in signal_emitv_unlocked (instance_and_params=0x7ffff720f907 <transform_func_lookup+375>, signal_id=4146278672, detail=0, return_value=0x1a5) at ../glib/gobject/gsignal.c:3211
#10 g_signal_emitv (instance_and_params=instance_and_params@entry=0x5555559ed7c0, signal_id=signal_id@entry=421, detail=detail@entry=0, return_value=return_value@entry=0x7fffffffd740)at ../glib/gobject/gsignal.c:3111
#11 0x00007ffff78e3737 in gtk_binding_entry_activate (entry=<optimized out>, object=<optimized out>) at ../gtk/gtk/gtkbindings.c:646
#12 0x00007ffff78e4668 in binding_activate (binding_set=binding_set@entry=0x555555805c70, entries=entries@entry=0x55555596dd90, object=object@entry=0x5555558fd990, is_release=is_release@entry=0, unbound=unbound@entry=0x7fffffffd80c) at ../gtk/gtk/gtkbindings.c:1455
#13 0x00007ffff78e9af2 in gtk_bindings_activate_list (object=object@entry=0x5555558fd990, entries=entries@entry=0x55555596dd90, is_release=0) at ../gtk/gtk/gtkbindings.c:1514
#14 0x00007ffff78e9ddf in gtk_bindings_activate_event (object=0x5555558fd990, event=0x5555557e0a20) at ../gtk/gtk/gtkbindings.c:1601
#15 gtk_bindings_activate_event (object=0x5555558fd990, event=0x5555557e0a20) at ../gtk/gtk/gtkbindings.c:1581
#16 0x00007ffff7f8ea04 in exo_icon_view_key_press_event (widget=widget@entry=0x5555558fd990, event=0x5555557e0a20) at /usr/src/debug/exo/exo/exo/exo-icon-view.c:2561
#17 0x00007ffff78b8815 in _gtk_marshal_BOOLEAN__BOXED (closure=0x5555556c1ea0, return_value=0x7fffffffda50, param_values=0x7fffffffdae0, marshal_data=<optimized out>, invocation_hint=<optimized out>, n_param_values=<optimized out>) at gtk/gtkmarshalers.c:84
#18 0x00007ffff71e578d in g_closure_invoke (closure=0x5555556c1ea0, return_value=0x7fffffffda50, n_param_values=2, param_values=0x7fffffffdae0, invocation_hint=0x7fffffffda30) at ../glib/gobject/gclosure.c:833
#19 0x00007ffff7216b62 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x7fffffffdbf0, detail=detail@entry=0, instance=instance@entry=0x5555558fd990, emission_return=emission_return@entry=0x7fffffffdc70, instance_and_params=instance_and_params@entry=0x7fffffffdae0) at ../glib/gobject/gsignal.c:3927
#20 0x00007ffff720644f in signal_emit_valist_unlocked (instance=instance@entry=0x5555558fd990, signal_id=signal_id@entry=120, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffdd60)at ../glib/gobject/gsignal.c:3532
#21 0x00007ffff7206f32 in g_signal_emit_valist (instance=0x5555558fd990, signal_id=120, detail=0, var_args=var_args@entry=0x7fffffffdd60) at ../glib/gobject/gsignal.c:3262
#22 0x00007ffff7206ff4 in g_signal_emit (instance=instance@entry=0x5555558fd990, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3582
#23 0x00007ffff7b9a8ed in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x5555558fd990, event=0x5555557e0a20) at ../gtk/gtk/gtkwidget.c:7822
#24 0x00007ffff7baa61c in gtk_window_propagate_key_event (window=window@entry=0x5555557c77e0, event=event@entry=0x5555557e0a20) at ../gtk/gtk/gtkwindow.c:8259
#25 0x00007ffff7bacf3c in gtk_window_key_press_event (widget=0x5555557c77e0, event=0x5555557e0a20) at ../gtk/gtk/gtkwindow.c:8292
#26 0x00007ffff78b8815 in _gtk_marshal_BOOLEAN__BOXED (closure=0x5555556c1ea0, return_value=0x7fffffffe070, param_values=0x7fffffffe100, marshal_data=<optimized out>, invocation_hint=<optimized out>, n_param_values=<optimized out>) at gtk/gtkmarshalers.c:84
#27 0x00007ffff71e582a in g_closure_invoke (closure=0x5555556c1ea0, return_value=0x7fffffffe070, n_param_values=2, param_values=0x7fffffffe100, invocation_hint=0x7fffffffe050) at ../glib/gobject/gclosure.c:833
#28 0x00007ffff7216b62 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x7fffffffe210, detail=detail@entry=0, instance=instance@entry=0x5555557c77e0, emission_return=emission_return@entry=0x7fffffffe290, instance_and_params=instance_and_params@entry=0x7fffffffe100) at ../glib/gobject/gsignal.c:3927
#29 0x00007ffff720644f in signal_emit_valist_unlocked (instance=instance@entry=0x5555557c77e0, signal_id=signal_id@entry=120, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffe380)at ../glib/gobject/gsignal.c:3532
#30 0x00007ffff7206f32 in g_signal_emit_valist (instance=0x5555557c77e0, signal_id=120, detail=0, var_args=var_args@entry=0x7fffffffe380) at ../glib/gobject/gsignal.c:3262
#31 0x00007ffff7206ff4 in g_signal_emit (instance=instance@entry=0x5555557c77e0, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3582
#32 0x00007ffff7b9a8ed in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x5555557c77e0, event=0x5555557e0a20) at ../gtk/gtk/gtkwidget.c:7822
#33 0x00007ffff7a26aba in propagate_event (widget=widget@entry=0x5555557c77e0, event=event@entry=0x5555557e0a20, captured=captured@entry=0, topmost=topmost@entry=0x0) at ../gtk/gtk/gtkmain.c:2681
#34 0x00007ffff7a26b31 in gtk_propagate_event (widget=0x5555557c77e0, event=0x5555557e0a20) at ../gtk/gtk/gtkmain.c:2725
#35 0x00007ffff7a277bb in gtk_main_do_event (event=<optimized out>) at ../gtk/gtk/gtkmain.c:1921
#36 gtk_main_do_event (event=<optimized out>) at ../gtk/gtk/gtkmain.c:1691
#37 0x00007ffff7e35457 in _gdk_event_emit (event=0x5555557e0a20) at ../gtk/gdk/gdkevents.c:73
#38 _gdk_event_emit (event=0x5555557e0a20) at ../gtk/gdk/gdkevents.c:67
#39 0x00007ffff7e91b40 in gdk_event_source_dispatch.lto_priv () at ../gtk/gdk/x11/gdkeventsource.c:354
#40 0x00007ffff70e1559 in g_main_dispatch (context=0x55555565a8b0) at ../glib/glib/gmain.c:3357
#41 0x00007ffff7144257 in g_main_context_dispatch_unlocked (context=0x55555565a8b0) at ../glib/glib/gmain.c:4208
#42 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x55555565a8b0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4273
#43 0x00007ffff70e0a55 in g_main_context_iteration (context=context@entry=0x55555565a8b0, may_block=may_block@entry=1) at ../glib/glib/gmain.c:4338
#44 0x00007ffff7312cb6 in g_application_run (application=application@entry=0x55555566c140, argc=argc@entry=1, argv=argv@entry=0x7fffffffe948) at ../glib/gio/gapplication.c:2715
#45 0x00005555555711a1 in main (argc=1, argv=0x7fffffffe948) at /usr/src/debug/thunar/thunar/thunar/main.c:86