[bug] Загрузка состояния принимает NaN/inf, а сценарий очищает сцену до проверки тела #86
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Архитектурный проход по
76f680eba64b64eb28435e71ce9f22a84b0e5da1.Что есть сейчас
lib.rs::apply_stateразбирает позиционные строки и возвращает():parse::<f64>()допускает NaN/inf, ошибочные строки молча пропускаются.scenario.rs::apply_scenarioпроверяет заголовок и мир, затем очищает текущую расстановку и только после этого вызывает такой разбор тела, после чего сообщает успех.Native characterization test на отдельной копии загрузил:
Результат: объект
(NaN, inf, 0)с HP-100и SAM с NaN-координатой реально добавлены. Это дефект устойчивости к повреждённому/редактированному состоянию; удалённый exploit не заявляется. Для частично повреждённого сценария риск потерять текущую расстановку следует из порядка операций, отдельно host-загрузка не запускалась.Предложение
LayoutSnapshot/DTO: версия, конечность координат/углов, допустимые HP/роли/боезапас, лимиты сущностей и уникальность устойчивых ID/ссылок.sim.rng, тогда как отдельныйSim.seed, tick, next ID и часть истории сессии продолжают жить. Явно определить, что сбрасывается при повторном старте; не обещать полное восстановление боя из layout.Приёмка
Тесты: NaN/±inf, обрезанная строка, неверный kind, невозможные HP, невалидная ссылка/версия; ни один отказ не меняет активную сцену. Корректный старый сейв читается. Перезапуск сценария с тем же seed имеет определённую и проверяемую семантику независимо от ранее сыгранного боя. Индекс сценариев и payload не должны молча расходиться при неудачной записи.
Общий порядок и зависимости: архитектурная дорожная карта.
🤖 Agent: сделано в
b43d471706(запушено в main). Проверено нативными тестами, в игре не запускалось.