Защитная диагностика PHPSpreadsheet: обнаружение цикла OLE sector chain по GHSA-xh5m-36r6-47m3: runtime inventory, bounded regression, измеримый verdict, красная линия и пакет данных для владельца.
Ответ и граница применимости — PHPSpreadsheet: обнаружение цикла OLE sector chain
Задача этой страницы — проверить cycle detection до накопления XLS/OLE chain. Сначала подтвердите фактически загруженный phpoffice/phpspreadsheet, его digest, диапазон «Packagist:phpoffice/phpspreadsheet <= 5.8.0; first patched 5.8.1 | Packagist:phpoffice/phpspreadsheet <= 3.10.6; first patched 3.10.7 | Packagist:phpoffice/phpspreadsheet <= 2.4.6; first patched 2.4.7 | Packagist:phpoffice/phpspreadsheet <= 2.1.17; first patched 2.1.18 | Packagist:phpoffice/phpspreadsheet <= 1.30.5; first patched 1.30.6» и включённый entry point. Затем нужен только ограниченный regression: Decoder вызвать на metadata-only таблице из нескольких synthetic sectors; workbook materialization заменить spy. Боль: самоссылка сектора может бесконечно наращивать список и память. Итоговый артефакт: sector ID / visited set / chain length / allocation calls / verdict. GHSA GHSA-xh5m-36r6-47m3 задаёт проверяемый ориентир, но не доказывает состояние вашей установки.
Карта решения — PHPSpreadsheet: обнаружение цикла OLE sector chain
Разделите путь на Source → Parse/Normalize → Policy → Side effect. Специальная инварианта материала: Каждый переход проверяет bounds и visited до append; повтор завершается контролируемой ошибкой без частичного workbook. На каждой границе укажите представление данных, владельца решения и counter. Candidate становится NOT_APPLICABLE только при доказанном отсутствии package или entry point; неизвестная runtime-версия означает UNKNOWN, а не безопасность.
Подготовка безопасного стенда — PHPSpreadsheet: обнаружение цикла OLE sector chain
Соберите temp directory, in-memory repository/cache либо pure adapter. Примените протокол: Decoder вызвать на metadata-only таблице из нескольких synthetic sectors; workbook materialization заменить spy. Используйте короткие canary labels; пользовательские записи, токены, IP, реальные конфиги, production routes и environment dump запрещены. Network, shell, database, filesystem, browser и session issuance замените spies. До control сохраните hash fixture и нулевые counters.
Control и одна переменная — PHPSpreadsheet: обнаружение цикла OLE sector chain
Разрешённый control подтверждает, что harness достигает нужной ветки. Boundary-case меняет ровно один параметр и обязан остановиться до состояния «самоссылка сектора может бесконечно наращивать список и память». Сохраните поля sector ID / visited set / chain length / allocation calls / verdict, reason code и monotonic duration. Каждый переход проверяет bounds и visited до append; повтор завершается контролируемой ошибкой без частичного workbook. Не наращивайте размер/глубину после первого превышения и не используйте эксплуатационные payload.
Вердикт без догадок — PHPSpreadsheet: обнаружение цикла OLE sector chain
PASS: runtime и entry point подтверждены, control прошёл, boundary остановлен до side effect, cleanup доказан. FAIL: та же provenance и наблюдаемый запрещённый counter/state. UNKNOWN: нет digest, конфигурации, control, точки наблюдения или восстановления. NOT_APPLICABLE: компонент либо функция доказанно отсутствуют. Номер patched release без runtime readback не является PASS.
Красная линия и восстановление — PHPSpreadsheet: обнаружение цикла OLE sector chain
Немедленный стоп: sector посещён дважды, chain превысила table size или materialization продолжилась. После стопа не повторяйте проверку с большим вводом. Верните disposable state к исходному hash, освободите объекты и выполните один benign control. Ненулевой неожиданный counter сети, процессов, файлов, записей или сессий блокирует PASS и фиксируется отдельно.
Почему нужен отдельный материал — PHPSpreadsheet: обнаружение цикла OLE sector chain
Даёт visited-set invariant и cap относительно числа секторов файла. Не общий file-size limit: проверяется граф переходов OLE allocation table. Поэтому механическая замена framework, ОС или устройства не создаёт новый URL. Практическая самостоятельность выражена в deliverable «sector ID / visited set / chain length / allocation calls / verdict» и в инварианте: Каждый переход проверяет bounds и visited до append; повтор завершается контролируемой ошибкой без частичного workbook. Совпадающий старый intent должен стать update/merge-кандидатом.
Минимальный handoff — PHPSpreadsheet: обнаружение цикла OLE sector chain
Передайте владельцу GHSA GHSA-xh5m-36r6-47m3, runtime digest, границу «Packagist:phpoffice/phpspreadsheet <= 5.8.0; first patched 5.8.1 | Packagist:phpoffice/phpspreadsheet <= 3.10.6; first patched 3.10.7 | Packagist:phpoffice/phpspreadsheet <= 2.4.6; first patched 2.4.7 | Packagist:phpoffice/phpspreadsheet <= 2.1.17; first patched 2.1.18 | Packagist:phpoffice/phpspreadsheet <= 1.30.5; first patched 1.30.6», entry point, sanitized config, control/boundary rows, counters, verdict, stop reason и cleanup proof. Advisory опубликована 2026-07-23, обновлена 2026-07-23; эти даты отражают свежесть источника, а не популярность запроса или факт эксплуатации. После remediation повторите тот же fixture и сравните state transition.
Материал подготовлен редакцией VOne с помощью автоматизированного черновика; версии, даты, границы и ссылки вручную сверены по GitHub Advisory Database и прямой upstream-странице. Текст самостоятельный, не копирует источник и не содержит эксплуатационных шагов.
Источники и проверка
- GitHub Advisory Database — GHSA-xh5m-36r6-47m3 проверено 2026-09-02
- Первичный upstream advisory — phpoffice/phpspreadsheet проверено 2026-09-02
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.