К обсуждениям

Python 3.14.7 на musl: как проверить stack overflow при удалении вложенного списка

Редакция VOne Технологии

Python 3.14.7 на musl: как проверить stack overflow при удалении вложенного списка. Практическая проверка отделяет симптом от соседних причин: безопасный fixture, опровергающий control, измеримая развилка, стоп-линия и минимальный пакет для поддержки.

Как распознать именно этот случай

Запрос ограничен формулировкой «как проверить stack overflow при удалении глубоко вложенного списка на Alpine Linux и Python 3.14.7». Наблюдаемый симптом: на musl-системе рабочий поток аварийно завершается при освобождении глубоко вложенной структуры, хотя такой же fixture на другом libc проходит. Официально подтверждена более узкая граница: для Python, связанного с musl, расчёт ограничения стека теперь учитывает размер, заданный линкером. Это не означает, что любой похожий crash, warning, hang или неверный результат вызван именно этой ошибкой. Сначала запишите точную версию Python, режим сборки, платформу и один ожидаемый переход состояния; обновление всей среды не должно быть первым действием.

Изолированный опыт

Для паспорта T21-02 выполните только такой опыт: в контейнере Alpine построить синтетический список заданной глубины внутри одного worker thread, удалить его и записать exit code процесса при трёх заранее заданных глубинах. Входы должны быть синтетическими, а рискованный код — жить в отдельном child process, контейнере, pty или temp root. До запуска задайте deadline, лимит памяти и допустимые файлы. Не используйте реальные архивы, токены, адреса, пользовательские документы или production PID. Если нужный backend, libc, compiler или GUI недоступен, зафиксируйте environment blocker: это честнее, чем имитировать результат.

Что должно опровергнуть гипотезу

Опровергающая ветка: плоский список того же числа элементов и вложенный список на половинной глубине в новом процессе с тем же ulimit. Наблюдения пишутся строго как «libc | stack limit | глубина | основной или worker thread | exit code или signal | время освобождения». Сначала выполните control A, затем проблемный case B, полностью пересоздайте fixture и повторите A2. Если A2 расходится с A, опыт загрязнён cache, locale, descriptor, signal state или environment. Пустая ячейка не равна нулю, а текст exception не заменяет его класс. Такое разделение не позволяет объявить исправление только потому, что один запуск случайно не упал.

Развилки результата

Зелёная ветка разрешена только когда все три ограниченных случая завершаются без SIGSEGV, а контроль подтверждает, что fixture действительно создавал нужную глубину. Если оба варианта ведут себя одинаково плохо, чините fixture, а не Python. Если control чист, но симптом не воспроизводится, итог — not reproduced в конкретной конфигурации, не доказательство отсутствия дефекта вообще. Сравнение 3.14.6 и 3.14.7 допустимо лишь с одинаковым input и limits. Результат относится к issue-boundary, а не к скорости, безопасности или совместимости всего приложения.

Когда немедленно остановиться

Стоп-линия: не повышать глубину после первого сигнала и не запускать проверку внутри production-процесса. Остановитесь также при записи вне temp root, внешнем сетевом запросе, появлении приватных данных, неконтролируемом descendant process или превышении deadline. Не получайте зелёный статус отключением проверок, catch-all обработчиком, бесконечным retry или повышением лимитов после сбоя. Возврат должен быть проверяемым: остановить одноразовый контейнер, удалить синтетический fixture и не менять системный ulimit. После этого ещё раз снимите process/file inventory и убедитесь, что состояние совпало с baseline.

Что можно передать дальше

Для issue #151546 достаточно передать: образ Alpine, архитектура, Python build string, ulimit -s, глубина, thread mode, exit code и signal без core dump. Добавьте московский timestamp, labels A/B/A2 и точный критерий «{topic['green']}». Абсолютные пути, PIDs, hostnames, environment dumps, core dumps и содержимое рабочих файлов удалите или замените метками. Официальные источники подтверждают изменение «{topic['boundary']}», но не популярность запроса, позиции в поиске или готовность вашей системы. Такой пакет позволяет повторить один переход без доступа к инфраструктуре.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.