filechooser: Crash when clicking visit file in Recent
Steps to reproduce
- Open File Chooser dialogue through portal (e.g. using
ashpd-demo
) - Go to Recent files panel
- Right click a file
- Click Visit file
Current behavior
Most of the time, GNOME XDG portal will crash with the following logged to journal:
Gtk:ERROR:../gtk/gtkfilechooserutils.c:488:_gtk_file_info_get_file: assertion failed: (G_IS_FILE_INFO (info))
Expected outcome
The dialogue should go to the directory containing a file and not crash.
Version information
- GTK 4.10.4
- NixOS unstable
- GNOME Shell 44.1 XOrg session
Additional information
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1 0x00007efee05ecaf3 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78
#2 0x00007efee059dc86 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007efee05878ba in __GI_abort () at abort.c:79
#4 0x00007efee168febe in g_assertion_message (domain=domain@entry=0x7efee0ecd344 "Gtk", file=file@entry=0x7efee0f23a6e "../gtk/gtkfilechooserutils.c", line=line@entry=488,
func=func@entry=0x7efee0f23b00 <__func__.0> "_gtk_file_info_get_file", message=message@entry=0x3d827b0 "assertion failed: (G_IS_FILE_INFO (info))") at ../glib/gtestutils.c:3450
#5 0x00007efee16f5baa in g_assertion_message_expr (domain=domain@entry=0x7efee0ecd344 "Gtk", file=file@entry=0x7efee0f23a6e "../gtk/gtkfilechooserutils.c", line=line@entry=488,
func=func@entry=0x7efee0f23b00 <__func__.0> "_gtk_file_info_get_file", expr=expr@entry=0x7efee0f23a58 "G_IS_FILE_INFO (info)") at ../glib/gtestutils.c:3476
#6 0x00007efee0cfb1e6 in _gtk_file_info_get_file (info=info@entry=0x0) at ../gtk/gtkfilechooserutils.c:488
#7 0x00007efee0b511f3 in visit_file_cb (action=<optimized out>, parameter=<optimized out>, data=0x33d48d0) at ../gtk/gtkfilechooserwidget.c:1370
#8 0x00007efee14364c0 in g_closure_invoke (closure=0x3354870, return_value=return_value@entry=0x0, n_param_values=2, param_values=param_values@entry=0x7fff453443e0,
invocation_hint=invocation_hint@entry=0x7fff45344360) at ../gobject/gclosure.c:832
#9 0x00007efee1449576 in signal_emit_unlocked_R (node=node@entry=0x1000eb0, detail=detail@entry=0, instance=instance@entry=0x32616f0, emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fff453443e0) at ../gobject/gsignal.c:3812
#10 0x00007efee145048d in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fff45344580) at ../gobject/gsignal.c:3565
#11 0x00007efee145070f in g_signal_emit (instance=instance@entry=0x32616f0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3622
#12 0x00007efee15711ad in g_simple_action_activate (action=0x32616f0, parameter=0x0) at ../gio/gsimpleaction.c:227
#13 0x00007efee0d05dc6 in gtk_menu_tracker_item_activated (self=self@entry=0x3daae60) at ../gtk/gtkmenutrackeritem.c:842
#14 0x00007efee0d021d8 in gtk_popover_item_activate (button=<optimized out>, user_data=0x3daae60) at ../gtk/gtkmenusectionbox.c:200
#15 0x00007efee14364c0 in g_closure_invoke (closure=0x3daed30, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fff45344850,
invocation_hint=invocation_hint@entry=0x7fff453447d0) at ../gobject/gclosure.c:832
#16 0x00007efee1449576 in signal_emit_unlocked_R (node=node@entry=0x39a5990, detail=detail@entry=0, instance=instance@entry=0x3dab380, emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fff45344850) at ../gobject/gsignal.c:3812
#17 0x00007efee145048d in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fff453449d0) at ../gobject/gsignal.c:3565
#18 0x00007efee145070f in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3622
#19 0x00007efee0acc9f9 in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv (closure=<optimized out>, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>,
n_params=<optimized out>, param_types=0xee3b40) at gtk/gtkmarshalers.c:5445
#20 0x00007efee14366b9 in _g_closure_invoke_va (closure=closure@entry=0x3dad1e0, return_value=return_value@entry=0x0, instance=instance@entry=0x3dad050, args=args@entry=0x7fff45344cd0, n_params=3,
param_types=0xee3b40) at ../gobject/gclosure.c:895
#21 0x00007efee1450457 in g_signal_emit_valist (instance=0x3dad050, signal_id=179, detail=<optimized out>, var_args=var_args@entry=0x7fff45344cd0) at ../gobject/gsignal.c:3472
#22 0x00007efee145070f in g_signal_emit (instance=instance@entry=0x3dad050, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3622
#23 0x00007efee0b76cae in gtk_gesture_click_end (gesture=0x3dad050, sequence=sequence@entry=0x0) at ../gtk/gtkgestureclick.c:275
#24 0x00007efee1439592 in g_cclosure_marshal_VOID__BOXEDv (closure=0xee1a80, return_value=<optimized out>, instance=0x3dad050, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>,
param_types=0xee1ab0) at ../gobject/gmarshal.c:1686
#25 0x00007efee14366b9 in _g_closure_invoke_va (closure=closure@entry=0xee1a80, return_value=return_value@entry=0x0, instance=instance@entry=0x3dad050, args=args@entry=0x7fff45345050, n_params=1,
param_types=0xee1ab0) at ../gobject/gclosure.c:895
#26 0x00007efee1450457 in g_signal_emit_valist (instance=0x3dad050, signal_id=174, detail=<optimized out>, var_args=var_args@entry=0x7fff45345050) at ../gobject/gsignal.c:3472
#27 0x00007efee145070f in g_signal_emit (instance=instance@entry=0x3dad050, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3622
#28 0x00007efee0b73cb3 in _gtk_gesture_set_recognized (sequence=0x0, recognized=0, gesture=0x3dad050) at ../gtk/gtkgesture.c:340
#29 _gtk_gesture_check_recognized (gesture=gesture@entry=0x3dad050, sequence=sequence@entry=0x0) at ../gtk/gtkgesture.c:381
#30 0x00007efee0b753db in gtk_gesture_handle_event (controller=0x3dad050, event=0x3e61100, x=82.000007629394531, y=29) at ../gtk/gtkgesture.c:686
#31 0x00007efee0b782b3 in gtk_gesture_single_handle_event (controller=0x3dad050, event=0x3e61100, x=82.000007629394531, y=29) at ../gtk/gtkgesturesingle.c:230
#32 0x00007efee0b45ca6 in gtk_event_controller_handle_event (controller=controller@entry=0x3dad050, event=event@entry=0x3e61100, target=target@entry=0x3dabbf0, x=x@entry=82.000007629394531, y=y@entry=29)
at ../gtk/gtkeventcontroller.c:362
#33 0x00007efee0c86f48 in gtk_widget_run_controllers (widget=widget@entry=0x3dab380, event=event@entry=0x3e61100, target=target@entry=0x3dabbf0, x=82.000007629394531, y=29, phase=phase@entry=GTK_PHASE_CAPTURE)
at ../gtk/gtkwidget.c:4570
#34 0x00007efee0c8e684 in _gtk_widget_captured_event (widget=widget@entry=0x3dab380, event=event@entry=0x3e61100, target=target@entry=0x3dabbf0) at ../gtk/gtkwidget.c:4733
#35 0x00007efee0bb06be in gtk_propagate_event_internal (widget=0x3dab380, widget@entry=0x3dabbf0, event=event@entry=0x3e61100, topmost=<optimized out>) at ../gtk/gtkmain.c:1924
#36 0x00007efee0bb07ea in gtk_propagate_event (widget=widget@entry=0x3dabbf0, event=event@entry=0x3e61100) at ../gtk/gtkmain.c:2006
#37 0x00007efee0bb0d7b in gtk_main_do_event (event=0x3e61100) at ../gtk/gtkmain.c:1698
#38 0x00007efee0bdaf6c in surface_event (surface=surface@entry=0x3d7c520, event=<optimized out>, widget=widget@entry=0x3ce3e40) at ../gtk/gtkpopover.c:869
#39 0x00007efee0e06c39 in _gdk_marshal_BOOLEAN__POINTER (closure=closure@entry=0x3dbecd0, return_value=return_value@entry=0x7fff45345680, n_param_values=n_param_values@entry=2,
--Type <RET> for more, q to quit, c to continue without paging--c
param_values=param_values@entry=0x7fff453456e0, invocation_hint=invocation_hint@entry=0x7fff45345660, marshal_data=marshal_data@entry=0x0) at gdk/gdkmarshalers.c:258
#40 0x00007efee0e7dd1f in gdk_surface_event_marshaller (closure=0x3dbecd0, return_value=0x7fff45345680, n_param_values=2, param_values=0x7fff453456e0, invocation_hint=0x7fff45345660, marshal_data=0x0)
at ../gdk/gdksurface.c:435
#41 0x00007efee14364c0 in g_closure_invoke (closure=0x3dbecd0, return_value=return_value@entry=0x7fff45345680, n_param_values=2, param_values=param_values@entry=0x7fff453456e0,
invocation_hint=invocation_hint@entry=0x7fff45345660) at ../gobject/gclosure.c:832
#42 0x00007efee1449576 in signal_emit_unlocked_R (node=<optimized out>, detail=detail@entry=0, instance=instance@entry=0x3d7c520, emission_return=emission_return@entry=0x7fff453457d0,
instance_and_params=instance_and_params@entry=0x7fff453456e0) at ../gobject/gsignal.c:3812
#43 0x00007efee144fd75 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fff45345880) at ../gobject/gsignal.c:3575
#44 0x00007efee145070f in g_signal_emit (instance=instance@entry=0x3d7c520, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3622
#45 0x00007efee0e81375 in gdk_surface_handle_event (event=event@entry=0x3e61100) at ../gdk/gdksurface.c:2956
#46 0x00007efee0e68b2e in _gdk_event_emit (event=0x3e61100) at ../gdk/gdkevents.c:493
#47 0x00007efee0e4f9ca in gdk_event_source_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>) at ../gdk/x11/gdkeventsource.c:429
#48 0x00007efee16cad7d in g_main_dispatch (context=0xbfb1c0) at ../glib/gmain.c:3460
#49 g_main_context_dispatch (context=context@entry=0xbfb1c0) at ../glib/gmain.c:4200
#50 0x00007efee16cb028 in g_main_context_iterate (context=0xbfb1c0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4276
#51 0x00007efee16cb2df in g_main_loop_run (loop=0xd91b90) at ../glib/gmain.c:4479
#52 0x000000000040e571 in main ()
Screencast_from_2023-06-16_23-37-48
Weirdly, if I try to reproduce it in gtk4-demo
, the app will not crash – only the file chooser will disappear with “Dismissed by user” being logged to console.