Crash when trying top open subfolders of an unreadable directory (via location bar)
Version information
Thunar 4.20.0 on Xubuntu
Steps to reproduce
- Create a folder as root. (
sudo mkdir testfolder
) - Make folder unreadable. (
sudo chmod 0700 testfolder
) - In Thunar's location bar, type a path that is a subpath of that folder, the subpath doesn't have to exist. (example
/home/user/testfolder/subfolder
) - If "Open With" dialog pops up, pick Mousepad. (Not sure this matters, but that's what I did)
- Continue trying to open subfolders via the location bar entry.
Current behavior
After a few tries, this creates a crash / segfault. The first time it didn't crash, but subsequent times (when it opened immediately without the Open With dialog), Thunar crashed. I tried this on Porteux linux with 4.20.0 to make sure it wasn't just my setup, and there it didn't crash immediately but after several tries it did.
I get this is a very edge case scenario but I didn't know if was related to #1538 (closed), or if it could cause problems elsewhere, so I figured I'd report it.
Expected outcome
No crash.
But also, probably blocking the attempted opening of these files/folders. If #1538 (closed) is related, and there is to be a dialog blocking the opening of unredable folders, it would make sense if Thunar also displayed that dialog and blocked opening of anything beyond that initial unreadable folder. Because this creates a situation where if you think you're opening a file via the location bar, and are unaware that it is in an unreadable folder, it might look like an empty text file was successfully opened (mousepad checks if it's readable, but many apps don't and will open a blank/new file). Also the folder is unreadable, so it's impossible to know if the file exists or not.
Backtrace
I'm not sure if I did this right. I did gdb
then attach <pid of thunar>
then did the steps above. After the crash did backtrace
. If there is a better or more complete way to do this please let me know!
Thread 1 "thunar" received signal SIGSEGV, Segmentation fault.
Downloading source file /usr/src/glib2.0-2.82.1-0ubuntu1/debian/build/deb/../../../gio/gfile.c
[### ]
0x00007f9a31ed0659 in g_file_get_uri (file=0x606273815320) at ../../../gio/gfile.c:682
warning: 682 ../../../gio/gfile.c: No such file or directory
#0 0x00007f9a31ed0659 in g_file_get_uri (file=0x606273815320) at ../../../gio/gfile.c:682
#1 0x00006062478308d0 in ?? ()
#2 0x0000606247830938 in ?? ()
#3 0x00007f9a31e2345a in g_closure_invoke (closure=0x6062739ce6d0, return_value=0x7fff18f32cc0, n_param_values=1, param_values=0x6062739212d0, invocation_hint=0x7fff18f32aa0) at ../../../gobject/gclosure.c:833
#4 0x00007f9a31e536fd in signal_emit_unlocked_R.isra.0 (node=<optimized out>, detail=detail@entry=0, instance=instance@entry=0x606273997d60, emission_return=emission_return@entry=0x7fff18f32cc0, instance_and_params=instance_and_params@entry=0x6062739212d0) at ../../../gobject/gsignal.c:3960
#5 0x00007f9a31e40dc9 in signal_emitv_unlocked (instance_and_params=0x606273999e20, signal_id=837222672, detail=0, return_value=0x1f3) at ../../../gobject/gsignal.c:3211
#6 g_signal_emitv (instance_and_params=instance_and_params@entry=0x6062739212d0, signal_id=signal_id@entry=499, detail=detail@entry=0, return_value=return_value@entry=0x7fff18f32cc0) at ../../../gobject/gsignal.c:3111
#7 0x00007f9a322ceeb6 in gtk_binding_entry_activate (entry=<optimized out>, object=<optimized out>) at ../../../gtk/gtkbindings.c:646
#8 0x00007f9a322cfda8 in binding_activate (binding_set=binding_set@entry=0x6062736dfb40, entries=entries@entry=0x6062737d9ba0, object=object@entry=0x606273997d60, is_release=is_release@entry=0, unbound=unbound@entry=0x7fff18f32d8c) at ../../../gtk/gtkbindings.c:1455
#9 0x00007f9a322d5051 in gtk_bindings_activate_list (object=object@entry=0x606273997d60, entries=entries@entry=0x6062737d9ba0, is_release=0) at ../../../gtk/gtkbindings.c:1514
#10 0x00007f9a322d533a in gtk_bindings_activate_event (object=0x606273997d60, event=0x6062739d40d0) at ../../../gtk/gtkbindings.c:1601
#11 gtk_bindings_activate_event (object=0x606273997d60, event=0x6062739d40d0) at ../../../gtk/gtkbindings.c:1581
#12 0x00007f9a32373e83 in gtk_entry_key_press (widget=widget@entry=0x606273997d60, event=0x6062739d40d0) at ../../../gtk/gtkentry.c:4912
#13 0x00007f9a322a5034 in _gtk_marshal_BOOLEAN__BOXED (closure=0x6062733b9d40, return_value=0x7fff18f32fe0, param_values=0x7fff18f33070, marshal_data=<optimized out>, invocation_hint=<optimized out>, n_param_values=<optimized out>) at gtk/gtkmarshalers.c:84
#14 0x00007f9a31e2345a in g_closure_invoke (closure=0x6062733b9d40, return_value=0x7fff18f32fe0, n_param_values=2, param_values=0x7fff18f33070, invocation_hint=0x7fff18f32fc0) at ../../../gobject/gclosure.c:833
#15 0x00007f9a31e53980 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x7fff18f33180, detail=detail@entry=0, instance=instance@entry=0x606273997d60, emission_return=emission_return@entry=0x7fff18f33200, instance_and_params=instance_and_params@entry=0x7fff18f33070) at ../../../gobject/gsignal.c:3927
#16 0x00007f9a31e4371c in signal_emit_valist_unlocked (instance=instance@entry=0x606273997d60, signal_id=signal_id@entry=132, detail=detail@entry=0, var_args=var_args@entry=0x7fff18f332f0) at ../../../gobject/gsignal.c:3532
#17 0x00007f9a31e44181 in g_signal_emit_valist (instance=0x606273997d60, signal_id=132, detail=0, var_args=var_args@entry=0x7fff18f332f0) at ../../../gobject/gsignal.c:3262
#18 0x00007f9a31e44243 in g_signal_emit (instance=instance@entry=0x606273997d60, signal_id=<optimized out>, detail=detail@entry=0) at ../../../gobject/gsignal.c:3582
#19 0x00007f9a3257635c in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x606273997d60, event=0x6062739d40d0) at ../../../gtk/gtkwidget.c:7812
#20 0x00007f9a3258423b in gtk_window_propagate_key_event (window=0x60627343b5b0, event=0x6062739d40d0) at ../../../gtk/gtkwindow.c:8408
#21 0x00007f9a322a5034 in _gtk_marshal_BOOLEAN__BOXED (closure=0x6062734b0430, return_value=0x7fff18f335e0, param_values=0x7fff18f33670, marshal_data=<optimized out>, invocation_hint=<optimized out>, n_param_values=<optimized out>) at gtk/gtkmarshalers.c:84
#22 0x00007f9a31e2345a in g_closure_invoke (closure=0x6062734b0430, return_value=0x7fff18f335e0, n_param_values=2, param_values=0x7fff18f33670, invocation_hint=0x7fff18f335c0) at ../../../gobject/gclosure.c:833
#23 0x00007f9a31e533a3 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x7fff18f33780, detail=detail@entry=0, instance=instance@entry=0x60627343b5b0, emission_return=emission_return@entry=0x7fff18f33800, instance_and_params=instance_and_params@entry=0x7fff18f33670) at ../../../gobject/gsignal.c:3887
#24 0x00007f9a31e4371c in signal_emit_valist_unlocked (instance=instance@entry=0x60627343b5b0, signal_id=signal_id@entry=132, detail=detail@entry=0, var_args=var_args@entry=0x7fff18f338f0) at ../../../gobject/gsignal.c:3532
#25 0x00007f9a31e44181 in g_signal_emit_valist (instance=0x60627343b5b0, signal_id=132, detail=0, var_args=var_args@entry=0x7fff18f338f0) at ../../../gobject/gsignal.c:3262
#26 0x00007f9a31e44243 in g_signal_emit (instance=instance@entry=0x60627343b5b0, signal_id=<optimized out>, detail=detail@entry=0) at ../../../gobject/gsignal.c:3582
#27 0x00007f9a3257635c in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x60627343b5b0, event=0x6062739d40d0) at ../../../gtk/gtkwidget.c:7812
#28 0x00007f9a3240b677 in propagate_event (widget=widget@entry=0x60627343b5b0, event=event@entry=0x6062739d40d0, captured=captured@entry=0, topmost=topmost@entry=0x0) at ../../../gtk/gtkmain.c:2691
#29 0x00007f9a3240b6df in gtk_propagate_event (widget=0x60627343b5b0, event=0x6062739d40d0) at ../../../gtk/gtkmain.c:2735
#30 0x00007f9a3240c32a in gtk_main_do_event (event=<optimized out>) at ../../../gtk/gtkmain.c:1921
#31 gtk_main_do_event (event=<optimized out>) at ../../../gtk/gtkmain.c:1691
#32 0x00007f9a32aec7c7 in _gdk_event_emit (event=0x6062739d40d0) at ../../../gdk/gdkevents.c:73
#33 _gdk_event_emit (event=0x6062739d40d0) at ../../../gdk/gdkevents.c:67
#34 0x00007f9a32b46efe in gdk_event_source_dispatch.lto_priv () at ../../../gdk/x11/gdkeventsource.c:354
#35 0x00007f9a31d1d397 in g_main_dispatch (context=0x606273381900) at ../../../glib/gmain.c:3357
#36 0x00007f9a31d7ddc7 in g_main_context_dispatch_unlocked (context=0x606273381900) at ../../../glib/gmain.c:4208
#37 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x606273381900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4273
#38 0x00007f9a31d1c8b3 in g_main_context_iteration (context=context@entry=0x606273381900, may_block=may_block@entry=1) at ../../../glib/gmain.c:4338
#39 0x00007f9a31f5c65d in g_application_run (application=0x606273393900, argc=<optimized out>, argv=0x7fff18f33eb8) at ../../../gio/gapplication.c:2715
#40 0x00006062477efe24 in ?? ()
#41 0x00007f9a31a2a3b8 in __libc_start_call_main (main=main@entry=0x6062477efd30, argc=argc@entry=1, argv=argv@entry=0x7fff18f33eb8) at ../sysdeps/nptl/libc_start_call_main.h:58
#42 0x00007f9a31a2a47b in __libc_start_main_impl (main=0x6062477efd30, argc=1, argv=0x7fff18f33eb8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff18f33ea8) at ../csu/libc-start.c:360
#43 0x00006062477eff35 in ?? ()
Additional information
Thunar 4.18.10 on Fedora 40 Xfce doesn't seem to do this.
Let me know if I can add anything more (or if the backtrace can be done better)! Thanks!