# Политика безопасности

**Языки:** [English](SECURITY.md) · **Русский** · [简体中文](SECURITY.zh.md)

## Поддерживаемые версии

Пока крейт в pre-1.0, поддерживается только **последний опубликованный
минор**. Фиксы безопасности попадают в `main` и выходят PATCH-релизом
в течение нескольких дней.

| Версия  | Поддерживается         |
|---------|------------------------|
| 0.1.x   | ✅                     |
| старше  | ❌ — сперва обновитесь |

## Сообщение об уязвимости

**Пожалуйста, не открывайте публичные issue по проблемам безопасности.**

Напишите на **phpcraftdream@gmail.com** и укажите:

- Краткое описание уязвимости.
- Минимальный воспроизводитель (Ktav-вход, запускающий поведение;
  затронутый API — `parse` / `from_str` / `to_string` / `render`;
  ожидаемое против фактического).
- Версию, на которой наблюдалось (обычно достаточно вывода
  `cargo tree -p ktav`) плюс Rust-тулчейн, если нестандартный.
- Предпочтительный таймлайн раскрытия, если у вас он есть.

Подтверждение получите в течение **72 часов**. Опубликованный фикс
обычно выходит в течение **недели** для высокоприоритетных проблем,
дольше — если фикс нужно согласовать с каким-то биндингом или со
спецификацией формата.

## Область

Это референсный Rust-крейт, который оборачивают все остальные биндинги.
Реальная проблема здесь обычно затрагивает `ktav-lang/python`,
`ktav-lang/js`, `ktav-lang/golang` одновременно — относитесь соответственно.

Что считается проблемой безопасности для этого крейта:

- Паники на сформированном входе в `parse` / `from_str` / `to_string`
  / `render`. Крейт используется в downstream-биндингах со сборкой
  `panic = "abort"`, так что паника валит consumer-процесс.
- Неконтролируемое потребление памяти или CPU (квадратичное поведение,
  неограниченные аллокации, бесконечные циклы) на сформированном входе.
- Корректность `unsafe`: любая дыра в safety `unsafe`-блоков — выход
  за границы, UB, нарушения aliasing — даже если очевидного пути
  эксплуатации не видно.
- Любое поведение, при котором сформированный Ktav-вход порождает
  `Value` вне документированной грамматики (lossy round-trip,
  теряющий или подделывающий данные).

Что **не** считается проблемой безопасности здесь — пожалуйста,
используйте обычные issue:

- Регрессии производительности без DoS-характеристик.
- Непонятные или неточные сообщения парсера об ошибках.
- Проблемы в самом формате Ktav — им место в
  [`ktav-lang/spec`](https://github.com/ktav-lang/spec).
