xls2csv завершается с ошибкой SIGSEGV в случае, если stdin не tty: $ xls2csv </dev/null Ошибка сегментирования $ echo aaa | xls2csv Ошибка сегментирования Указанное поведение имеет место в скрипте midnight commander, выполняющемся при просмотре xls-файла: /usr/lib/mc/ext.d/doc.sh: line 36: 7531 Ошибка сегментирования xls2csv > /dev/null 2>&1 strace завершается так: $ strace xls2csv </dev/null ... ioctl(0, TCGETS, 0x7ffe21848470) = -1 ENOTTY (Неприменимый к данному устройству ioctl) --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} --- +++ killed by SIGSEGV +++ Ошибка сегментирования
Воспроизводится на catdoc 0.95-alt1 (сборка 2017, пересборки без изменений) в контейнере Sisyphus: $ xls2csv </dev/null → Segmentation fault, rc=139 $ echo aaa | xls2csv → rc=139 $ xls2csv test.xls → "Hello","42", rc=0 (с именем файла работает) gdb: #0 0x0000000000000000 in ?? () — вызов по NULL-указателю Причина: src/xls2csv.c:149 вызывает do_table(stdin, "STDIN") без предварительного set_std_func(), поэтому глобальный указатель catdoc_read (src/ole.c:634) остаётся NULL, и первый же catdoc_read() в src/xlsparse.c:43 — прыжок по нулевому адресу. Для файлов set_std_func() вызывается внутри цикла (xls2csv.c:172), поэтому путь с аргументом цел. Та же ошибка в catppt (src/catppt.c:130): catppt </dev/null → rc=139. Патч (собран и проверен в контейнере: после него xls2csv </dev/null → "STDIN: No BOF record found", rc=1; catppt </dev/null → rc=0): --- a/src/catppt.c +++ b/src/catppt.c @@ -127,6 +127,7 @@ int main(int argc, char *argv[]) { help(); exit(0); } + set_std_func(); do_ppt(stdin,"STDIN"); exit (0); } --- a/src/xls2csv.c +++ b/src/xls2csv.c @@ -146,6 +146,7 @@ int main(int argc, char *argv[]) help(); exit(0); } + set_std_func(); do_table(stdin,"STDIN"); exit (0); } Апстрим: последний релиз 0.95 (2016), в git есть два коммита от 15.11.2025, stdin-путь не тронут; Debian патча тоже не несёт. Триггер из отчёта (mc) сейчас не срабатывает: /usr/lib/mc/ext.d/doc.sh:77 вызывает xls2csv с именем файла. Отдельно: даже с патчем xls2csv < file.xls отвечает "No BOF record found" — stdin-режим в апстриме ждёт сырой BIFF-поток, а не OLE-контейнер; это уже не падение.
catdoc-0.95-alt2 -> sisyphus: Tue Oct 13 2026 Vitaly Lipatov <lav@altlinux.ru> 0.95-alt2 - Fix SIGSEGV in xls2csv and catppt when reading from stdin (closes: #35505).