Версия пакета: ============== manticore-converter-29.9.0-alt1 (Sisyphus, x86_64) sphinx-2.3.2-alt5.1 Описание проблемы: ================== Утилита index_converter падает с ошибкой сегментирования (SIGSEGV) при попытке конвертации индексов Sphinx как при передаче файла конфигурации (--config /etc/sphinx/sphinx.conf.rpmsave --all), так и при передаче директории с индексами (--path ./sphinx.bac --all). Ранее закрытый баг #43414 (где рекомендовалось завести новый баг с бэктрейсом при повторении на актуальной версии). Шаги для воспроизведения: ========================= 1. Установить sphinx, mariadb-server и подготовить тестовый индекс sphinx: # apt-get install sphinx libsphinxclient mariadb-server -y # systemctl enable --now mysqld # echo "CREATE USER 'test'@'localhost' IDENTIFIED BY '1';" | mysql # echo "GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';" | mysql # mysql test < /usr/share/doc/sphinx-*/example.sql # sed -i "s/sql_pass.*/sql_pass = 1/" /etc/sphinx/sphinx.conf # systemctl enable --now searchd # su - _sphinx -s /bin/sh -c "indexer --verbose --rotate --all" 2. Установить manticore и manticore-converter: # apt-get install manticore manticore-converter -y # cp -r /var/lib/sphinx ./sphinx.bac 3. Выполнить конвертацию: # index_converter --config /etc/sphinx/sphinx.conf.rpmsave --all или # index_converter --path ./sphinx.bac --all Результат: ========== В обоих случаях процесс немедленно завершается с кодом 139 (Segmentation fault). GDB Backtrace 1 (при вызове с --config): ======================================== Program received signal SIGSEGV, Segmentation fault. 0x00005555558a0af4 in CSphOrderedHash<CSphConfigSection, CSphString, CSphStrHashFunc, 256>::Iterator_c::operator++ (this=<synthetic pointer>) at /usr/src/debug/manticore-29.9.0/src/std/orderedhash.h:153 153 Iterator_c& operator++() #0 0x00005555558a0af4 in CSphOrderedHash<CSphConfigSection, CSphString, CSphStrHashFunc, 256>::Iterator_c::operator++ (this=<synthetic pointer>) at /usr/src/debug/manticore-29.9.0/src/std/orderedhash.h:153 #1 main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/manticore-29.9.0/src/index_converter.cpp:2595 Причина: в src/index_converter.cpp объект `CSphConfig hConfig` объявлен локально в блоке `if (!sConfig.IsEmpty()) { ... }`, а указатель `pIndexes = hConfig("index")` используется после выхода из блока (use-after-free). GDB Backtrace 2 (при вызове с --path): ====================================== Program received signal SIGSEGV, Segmentation fault. main (argc=4, argv=0x7fffffffe978) at /usr/src/debug/manticore-29.9.0/src/index_converter.cpp:2587 2587 auto pItt = pIndexes->begin(); #0 main (argc=4, argv=0x7fffffffe978) at /usr/src/debug/manticore-29.9.0/src/index_converter.cpp:2587 Причина: `pIndexes` равен nullptr, происходит разыменование нулевого указателя.