nautilus crashes when `basename` of file in `x-special/gnome-copied-files` is NULL
Reproduced with FreeRDP3 (master branch) (x-special/gnome-copied-files
content owner),
nautilus 40.2-1 (x-special/gnome-copied-files
consumer),
Distro: Archlinux
Could also be considered as an error in glib. I'll leave this decision though up to you.
Some extra information: Currently, FreeRDP3 (the POSIX clipboard in WinPR) ends every line in the aforementioned mime type with \n
, even the last line.
However, regardless of this, nautilus should not crash with an invalid list, just ignore it, if something cannot be "repaired".
@oholy When copying files, I can workaround this with https://github.com/FreeRDP/FreeRDP/pull/7222. However, this won't work, when copying folders for some reason.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 fast_validate (str=<optimized out>) at ../glib/glib/gutf8.c:1498
1498 ../glib/glib/gutf8.c: Datei oder Verzeichnis nicht gefunden.
[Current thread is 1 (Thread 0x7fdf5bfff640 (LWP 546608))]
(gdb) bt full
#0 fast_validate (str=<optimized out>) at ../glib/glib/gutf8.c:1498
p = 0x0
p = <optimized out>
#1 g_utf8_validate (max_len=<optimized out>, end=<optimized out>, str=<optimized out>) at ../glib/glib/gutf8.c:1681
p = <optimized out>
#2 g_utf8_validate (str=str@entry=0x0, max_len=max_len@entry=-1, end=end@entry=0x0) at ../glib/glib/gutf8.c:1671
#3 0x000055d9cd4daa38 in get_basename (file=file@entry=0x55d9d2240c30) at ../nautilus/src/nautilus-file-operations.c:1020
info = <optimized out>
name = <optimized out>
basename = 0x0
tmp = <optimized out>
mount = <optimized out>
#4 0x000055d9cd4dbe56 in scan_file (job=0x55d9d21d5e90, source_info=0x7fdf5bffeb20, file=0x55d9d2240c30) at ../nautilus/src/nautilus-file-operations.c:3606
basename = 0x0
info = 0x0
dirs = 0x55d9d0b67a40
dir = <optimized out>
error = 0x55d9d04aca60
primary = 0x7fdf60000a40 "Fehler beim Kopieren."
secondary = <optimized out>
details = 0x0
response = <optimized out>
l = 0x55d9d20af860 = {0x55d9d2240c30}
file = 0x55d9d2240c30
#5 scan_sources (files=<optimized out>, source_info=<optimized out>, job=0x55d9d21d5e90, kind=<optimized out>)
at ../nautilus/src/nautilus-file-operations.c:3687
l = 0x55d9d20af860 = {0x55d9d2240c30}
file = 0x55d9d2240c30
#6 0x000055d9cd4e15b4 in nautilus_file_operations_copy
(task=<optimized out>, source_object=<optimized out>, task_data=0x55d9d21d5e90, cancellable=<optimized out>)
at ../nautilus/src/nautilus-file-operations.c:6032
job = 0x55d9d21d5e90
common = 0x55d9d21d5e90
source_info =
{num_files = 2, num_bytes = 0, num_files_since_progress = 2, op = OP_KIND_COPY, scanned_dirs_info = 0x55d9d0938400 = {[0x55d9d0951320] = 0x7fdf600ecfe0}}
transfer_info =
{num_files = -769548576, num_bytes = 140598013001072, op = OP_KIND_MOVE, last_report_time = 15000, last_reported_files_left = -817619840, partial_progress = 21977}
--Type <RET> for more, q to quit, c to continue without paging--c
dest_fs_id = 0x0
dest = <optimized out>
#7 0x00007fdf85db1777 in g_task_thread_pool_thread (thread_data=0x7fdf5c09dc90, pool_data=<optimized out>) at ../glib/gio/gtask.c:1430
task = 0x7fdf5c09dc90
#8 0x00007fdf86a01a17 in g_thread_pool_thread_proxy (data=<optimized out>) at ../glib/glib/gthreadpool.c:354
task = 0x7fdf5c09dc90
pool = <optimized out>
#9 0x00007fdf869fef01 in g_thread_proxy (data=0x55d9d21772a0) at ../glib/glib/gthread.c:826
thread = 0x55d9d21772a0
__func__ = "g_thread_proxy"
#10 0x00007fdf8597a259 in start_thread () at /usr/lib/libpthread.so.0
#11 0x00007fdf858a35e3 in clone () at /usr/lib/libc.so.6