Crash on displaying popup panel when typing long pathname in path bar
Affected version
- Nightly flatpak: Yes
- Other: Fedora 34 (Workstation Edition) / Nautilus 40.1
Steps to reproduce
- Create a deeply nested directory by running the trivial python script
#!/bin/python3
import os
for X in range(20):
os.mkdir(f"{X}" * 127)
os.chdir(f"{X}" * 127)
- Try typing the directory name like
/home/willy/devel/playground/0<RightArrow>1<RightArrow>/
, use<RightArrow>
to make nautilus autocomplete the pathname
Current behavior
Nautilus crashes on displaying the popup panel for autocompleting pathname exactly at 181818...1818/1
Expected behavior
Nautilus show the directory and display an error message if path name is too long. (At ..../1919...19
, the path name is exactly 3858 characters long.)
Also it would be nice if nautilus can show contents of a directory even the full path starting from root '/' exceeds 4096 chars.
Additional information
Terminal output:
(org.gnome.NautilusDevel:2): Gdk-CRITICAL **: 01:26:10.906: ../gdk/wayland/gdkdisplay-wayland.c:1403: Unable to create Cairo image surface: invalid value (typically too big) for the size of the input (surface, pattern, etc.)
Backtrace:
#0 0x00007c8df810a732 in wl_buffer_add_listener (data=0x7c8df7f8ec80 <_cairo_surface_nil_invalid_size.lto_priv.0>, listener=Python Exception <class 'gdb.MemoryError'> Cannot access memory at address 0x18:
0x7c8df8162ed0 <buffer_listener>, wl_buffer=#1 gdk_wayland_window_ensure_cairo_surface.isra.0 (window=<optimized out>, window=<optimized out>) at wayland/gdkwindow-wayland.c:984
display_wayland = <optimized out>
Python Exception <class 'gdb.MemoryError'> Cannot access memory at address 0x18:
buffer = #2 0x00007c8df80ffec1 in gdk_window_impl_wayland_begin_paint (window=<optimized out>) at wayland/gdkwindow-wayland.c:1022
#3 0x00007c8df80b225d in gdk_window_begin_paint_internal (region=0x585f6d503bb0, window=0x585f6d65b280) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkwindow.c:2954
clip_box = {x = -1626282720, y = 32765, width = -137963056, height = 31885}
sy = 6.952851059635364e-310
needs_surface = 1
surface_content = <optimized out>
impl_class = <optimized out>
sx = 6.9528510596148109e-310
__func__ = "gdk_window_begin_paint_internal"
#4 gdk_window_begin_paint_internal (window=window@entry=0x585f6d65b280, region=region@entry=0x585f6d503bb0) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkwindow.c:2930
__func__ = "gdk_window_begin_paint_internal"
#5 0x00007c8df80b27fe in gdk_window_begin_draw_frame (window=window@entry=0x585f6d65b280, region=region@entry=0x585f6d503bb0) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkwindow.c:3257
context = <optimized out>
impl_class = <optimized out>
__func__ = "gdk_window_begin_draw_frame"
#6 0x00007c8df85149ab in gtk_widget_render (widget=0x585f6ccca500, window=0x585f6d65b280, region=0x585f6d503bb0) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkwidget.c:17587
context = <optimized out>
do_clip = <optimized out>
cr = <optimized out>
x = 22623
y = 1825350912
#7 0x00007c8df83ba20b in gtk_main_do_event (event=<optimized out>) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkmain.c:1844
grab_widget = 0x585f6ccca500
window_group = 0x585f6d1278b0
rewritten_event = <optimized out>
device = <optimized out>
tmp_list = <optimized out>
event_widget = <optimized out>
topmost_widget = <optimized out>
__func__ = "gtk_main_do_event"
#8 gtk_main_do_event (event=<optimized out>) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkmain.c:1691
__func__ = "gtk_main_do_event"
#9 0x00007c8df809c7d3 in _gdk_event_emit (event=0x7ffd9f10e520) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkevents.c:73
#10 _gdk_event_emit (event=0x7ffd9f10e520) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkevents.c:67
#11 0x00007c8df80af181 in _gdk_window_process_updates_recurse_helper (window=0x585f6d65b280, expose_region=<optimized out>) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkwindow.c:3874
event =
{type = GDK_EXPOSE, any = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000'}, expose = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', area = {x = 0, y = 0, width = 34583, height = 48}, region = 0x585f6d503bb0, count = 0}, visibility = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', state = GDK_VISIBILITY_UNOBSCURED}, motion = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, x = 7.3384980438952012e-310, y = 4.8005910779031071e-310, axes = 0x585f6d503bb0, state = 0, is_hint = 22623, device = 0x585f6ccb5660, x_root = 4.800681757789--Type <RET> for more, q to quit, c to continue without paging--
2254e-310, y_root = 6.7661892004483182e-310}, button = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, x = 7.3384980438952012e-310, y = 4.8005910779031071e-310, axes = 0x585f6d503bb0, state = 0, button = 22623, device = 0x585f6ccb5660, x_root = 4.8006817577892254e-310, y_root = 6.7661892004483182e-310}, touch = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, x = 7.3384980438952012e-310, y = 4.8005910779031071e-310, axes = 0x585f6d503bb0, state = 0, sequence = 0x585f6ccb5660, emulating_pointer = 1835381376, device = 0x7c8df8103fc9, x_root = 0, y_root = 6.7661891824933797e-310}, scroll = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, x = 7.3384980438952012e-310, y = 4.8005910779031071e-310, state = 1833974704, direction = 22623, device = 0x585f00000000, x_root = 4.800681257986094e-310, y_root = 4.8006817577892254e-310, delta_x = 6.7661892004483182e-310, delta_y = 0, is_stop = 1}, key = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, state = 0, keyval = 34583, length = 48, string = 0x585f6d503bb0 "\001", hardware_keycode = 0, group = 0 '\000', is_modifier = 0}, crossing = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', subwindow = 0x871700000000, time = 48, x = 4.8006816882903944e-310, y = 4.8005910779007356e-310, x_root = 4.800681257986094e-310, y_root = 4.8006817577892254e-310, mode = 4161814473, detail = 31885, focus = 0, state = 0}, focus_change = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', in = 27980}, configure = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', x = 0, y = 0, width = 34583, height = 48}, property = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', atom = 0x871700000000, time = 48, state = 22623}, selection = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', selection = 0x871700000000, target = 0x585f00000030, property = 0x585f6d503bb0, time = 0, requestor = 0x585f6ccb5660}, owner_change = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', owner = 0x871700000000, reason = (unknown: 0x30), selection = 0x585f6d503bb0, time = 0, selection_time = 22623}, proximity = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, device = 0x871700000000}, dnd = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', context = 0x871700000000, time = 48, x_root = 22623, y_root = 0}, window_state = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', changed_mask = 0, new_window_state = 0}, setting = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', action = GDK_SETTING_ACTION_NEW, name = 0x871700000000 <error: Cannot access memory at address 0x871700000000>}, grab_broken = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', keyboard = 0, implicit = 0, grab_window = 0x585f00000030}, touchpad_swipe = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', phase = 116 't', n_fingers = 76 'L', time = 0, x = 7.3384980438952012e-310, y = 4.8005910779031071e-310, dx = 4.8006816882903944e-310, dy = 4.8005910779007356e-310, x_root = 4.800681257986094e-310, y_root = 4.8006817577892254e-310, state = 4161814473}, touchpad_pinch = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', phase = 116 't', n_fingers = 76 'L', time = 0, x = 7.3384980438952012e-310, y = 4.8005910779031071e-310, dx = 4.8006816882903944e-310, dy = 4.8005910779007356e-310, angle_delta = 4.800681257986094e-310, scale = 4.8006817577892254e-310, x_root = 6.7661892004483182e-310, y_root = 0, state = 4161451061}, pad_button = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, group = 0, button = 34583, mode = 48}, pad_axis = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, group = 0, index = 34583, mode = 48, value = 4.8006816882903944e-310}, pad_group_mode = {type = GDK_EXPOSE, window = 0x585f6d65b280, send_event = 0 '\000', time = 0, group = 0, mode = 34583}}
child = <optimized out>
clipped_expose_region = 0x585f6d503bb0
children = <optimized out>
free_children = 0x0
i = <optimized out>
n_children = <optimized out>
l = <optimized out>
last_link = <optimized out>
#12 0x00007c8df80b4251 in gdk_window_process_updates_internal (window=0x585f6d65b280) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkwindow.c:4020
expose_region = 0x585f6d4c74f0
impl_class = 0x585f6ccb5660
toplevel = <optimized out>
display = <optimized out>
__func__ = "gdk_window_process_updates_internal"
#13 0x00007c8df80b4448 in gdk_window_process_updates_with_mode (window=<optimized out>, recurse_mode=<optimized out>) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkwindow.c:4215
impl_window = 0x585f6d65b280
list = 0x585f6ce55cc0
i = <optimized out>
__func__ = "gdk_window_process_updates_with_mode"
#14 0x00007c8df7c7e83a in _g_closure_invoke_va (param_types=0x0, n_params=<optimized out>, args=0x7ffd9f10e7d0, instance=0x585f6d5174e0, return_value=0x0, closure=0x585f6d6de740) at ../gobject/gclosure.c:873
marshal = <optimized out>
marshal_data = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
in_marshal = 0
real_closure = 0x585f6d6de720
return_accu = 0x0
accu =
{g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
accumulator = 0x0
emission = Python Exception <class 'TypeError'> can only concatenate str (not "NoneType") to str:
{next = 0x0, instance = 0x585f6d5174e0, ihint = {signal_id = 136, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = }
signal_id = 136
Python Exception <class 'TypeError'> can only concatenate str (not "NoneType") to str:
instance_type =
emission_return =
{g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x4
static_scope = 0
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = 1
instance_and_params = <optimized out>
signal_return_type = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
n_params = <optimized out>
__func__ = "g_signal_emit_valist"
#15 g_signal_emit_valist (instance=0x585f6d5174e0, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7ffd9f10e7d0) at ../gobject/gsignal.c:3406
return_accu = 0x0
accu =
{g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
accumulator = 0x0
emission = Python Exception <class 'TypeError'> can only concatenate str (not "NoneType") to str:
{next = 0x0, instance = 0x585f6d5174e0, ihint = {signal_id = 136, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = }
signal_id = 136
Python Exception <class 'TypeError'> can only concatenate str (not "NoneType") to str:
instance_type =
emission_return =
{g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x4
static_scope = 0
--Type <RET> for more, q to quit, c to continue without paging--
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = 1
instance_and_params = <optimized out>
signal_return_type = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
n_params = <optimized out>
__func__ = "g_signal_emit_valist"
#16 0x00007c8df7c7e983 in g_signal_emit (instance=instance@entry=0x585f6d5174e0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3553
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7ffd9f10e8b0, reg_save_area = 0x7ffd9f10e7f0}}
#17 0x00007c8df80a9c9f in _gdk_frame_clock_emit_paint (frame_clock=0x585f6d5174e0) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkframeclock.c:657
clock = 0x585f6d5174e0
clock_idle = 0x585f6d5174e0
priv = 0x585f6d5173e0
skip_to_resume_events = 0
timings = 0x7c8ddc06ba40
__func__ = "gdk_frame_clock_paint_idle"
#18 gdk_frame_clock_paint_idle (data=0x585f6d5174e0) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdkframeclockidle.c:597
clock = 0x585f6d5174e0
clock_idle = 0x585f6d5174e0
priv = 0x585f6d5173e0
skip_to_resume_events = 0
timings = 0x7c8ddc06ba40
__func__ = "gdk_frame_clock_paint_idle"
#19 0x00007c8df809631d in gdk_threads_dispatch (data=data@entry=0x585f6ce56400) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gdk/gdk.c:769
dispatch = 0x585f6ce56400
ret = 0
#20 0x00007c8df896dd21 in g_timeout_dispatch (source=0x585f6d45dd90, callback=0x7c8df80962f0 <gdk_threads_dispatch>, user_data=0x585f6ce56400) at ../glib/gmain.c:4889
timeout_source = 0x585f6d45dd90
again = <optimized out>
#21 0x00007c8df896d4cf in g_main_dispatch (context=0x585f6cbfab60) at ../glib/gmain.c:3337
dispatch = 0x7c8df896dd00 <g_timeout_dispatch>
prev_source = 0x0
begin_time_nsec = 85303247339140
was_in_call = <optimized out>
user_data = 0x585f6ce56400
callback = 0x7c8df80962f0 <gdk_threads_dispatch>
--Type <RET> for more, q to quit, c to continue without paging--
cb_funcs = 0x7c8df8a503a0 <g_source_callback_funcs>
cb_data = 0x585f6d4e1870
need_destroy = <optimized out>
source = 0x585f6d45dd90
current = 0x585f6cc05c60
i = 0
#22 g_main_context_dispatch (context=0x585f6cbfab60) at ../glib/gmain.c:4055
#23 0x00007c8df89c14e8 in g_main_context_iterate.constprop.0 (context=context@entry=0x585f6cbfab60, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4131
max_priority = 120
timeout = 0
some_ready = 1
nfds = 3
allocated_nfds = 3
fds = <optimized out>
begin_time_nsec = 85303247306524
#24 0x00007c8df896ac03 in g_main_context_iteration (context=context@entry=0x585f6cbfab60, may_block=may_block@entry=1) at ../glib/gmain.c:4196
retval = <optimized out>
#25 0x00007c8df7d8495d in g_application_run (application=0x585f6cbe5210, argc=-1626281308, argv=<optimized out>) at ../gio/gapplication.c:2560
arguments = 0x585f6cbe3f90
status = 0
context = 0x585f6cbfab60
acquired_context = <optimized out>
__func__ = "g_application_run"
#26 0x0000585f6ad09279 in main (argc=2, argv=0x7ffd9f10ec08) at ../src/nautilus-main.c:81
retval = <optimized out>
application = 0x585f6cbe5210
Edited by Ye Moran