diff --git a/doc/tasks.md b/doc/tasks.md index d6749b98..0bbfbaf1 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,6 +4,18 @@ ## Текущие задачи +[ ] **Routing: ограничить длину результата topo_node_format_all при усечении**. + 24.10.2026, аудит topo_node: при buf_size=1/2/5/12/13 функция возвращает 13, хотя записаны + соответственно 0/1/4/11/12 байт. Причина — snprintf возвращает требуемую длину маркера, + а код прибавляет её к pos как фактически записанную. FMT_ADD также продолжает наращивать + pos после усечения внутри одного узла, формируя указатели за пределами заявленного буфера. + control_server использует возвращённую длину для text[text_len] и копирования; его текущий + буфер существенно больше 13 байт, сбой рабочего control-вызова этим опытом не установлен. + План: поддерживать pos <= buf_size-1, завершать добавление при заполнении, ограничить маркер + оставшимся местом и возвращать фактическую длину; проверить маленькие буферы и усечение внутри узла/пути. + Воспроизведение: /tmp/topo-node-format-audit.c; лог: /tmp/topo-node-format-audit.log (5 неверных длин из 9 размеров). + Дальнейший аудит остановлен по AGENTS.md; код форматирования и документы модулей не менялись. + [+] **Routing: согласовать обход секции подсетей в topo_node_deserialize с wire-размером**. 24.10.2026: ручная упаковка/разбор доработаны без lib/serialize. Без TOPO_FLAG_SEND_SUBNETS счётчики подсетей равны 0; противоречащий заголовок отклоняется до выделения объектов.