Как воспроизвести баг на который я напоролся.
useradd -m mctest
chmod u-w /home/mctest
su mctest
mcedit # табличка не могу создать директорию и segfault.
Изрядно повозившись с исходниками и gdb, нашёл то место из-за которого он и происходит
// https://github.com/MidnightCommander/mc/blob/master/lib/util.c#L1136
char *
concat_dir_and_file (const char *dir, const char *file)
{
int i = strlen (dir);
if (dir[i - 1] == PATH_SEP)
return g_strconcat (dir, file, (char *) NULL);
else
return g_strconcat (dir, PATH_SEP_STR, file, (char *) NULL);
}
Дело, наверное в том что в вызывающей данную функцию edit_file() https://github.com/MidnightCommander/mc/blob/master/src/editor/editwidget.c#L360 плохое условие на проверку ошибки существования и возможности создания директории. В результате в concat_dir_and_file попадает NULL и «mcedit».
Такие дела.
cast Slavaz