56 lines
5.9 KiB
Plaintext
56 lines
5.9 KiB
Plaintext
Аудит config_parser — 26.10.2026
|
||
|
||
Полностью прочитаны config_parser.c/.h, config_parser_doc.md и общий config_ini.h.
|
||
Для согласования строгого разбора также повторно сверены config_updater.c/.h/_doc.md.
|
||
Разбор сохраняет модель и владение free_config; запуск ресурсов остаётся у instance.
|
||
|
||
Исправления
|
||
- IPv6 /32 больше не подменяется /128; префиксы проверяются до сужения к uint8_t.
|
||
Control allow=/0 задаёт нулевую маску без сдвига на 32; IPv6 control allow отклоняется.
|
||
- Ошибки известных обработчиков и выделения памяти отклоняют всю модель.
|
||
Все частичные списки освобождаются, включая client links и не завершённую секцию.
|
||
- Числа проверяются целиком до преобразования: знаки, хвост, диапазон и overflow.
|
||
Keepalive interval помещается в uint16_t; таймеры ограничены до умножения.
|
||
Bool унифицирован: 0/1, no/yes, false/true. Версия — ровно три десятичных октета.
|
||
- Адресные порты проверяются как decimal 0..65535, SOCKS — 1..65535.
|
||
Control ip/port даёт одинаковый результат в обоих порядках; ошибки getaddrinfo не теряются.
|
||
- Storage sizes проверяют UINT64_MAX, множитель M/G и полный хвост; -1 не становится безлимитом,
|
||
переполнение не становится нулевым лимитом. Слишком длинные строковые настройки отклоняются.
|
||
- Network ID ограничен 56 битами; требуются оба 32-byte HEX ключа.
|
||
Предоставленные ключи идентичности/пиров проверяются целиком; пустые необязательные остаются незаданными.
|
||
- CFG_CLIENT_LINK сохраняет имя local_srv. Повторный обычный addr сбрасывает режим dynamic IPv6.
|
||
- Флаг tcp_proxy_client enabled=no не включается снова следующей опцией той же секции.
|
||
Наличие service-секции задаёт её default enable и при отсутствии опций.
|
||
- Print_config не печатает private/signing keys; Networks выведены за пределы firewall-цикла.
|
||
Устаревший append ключей проверяет вход, запись и fclose; не объявляется атомарным updater.
|
||
- Updater выбирает итоговую идентичность/REALITY по последнему вхождению, но исправляет также
|
||
синтаксически плохие ранние дубли выбранными значениями. Из-за такого дубля ключи не генерируются заново.
|
||
Это нужно, поскольку строгий парсер проверяет каждое вхождение. Булевы REALITY enabled согласованы.
|
||
|
||
Контракты и ограничения
|
||
Обновлены заголовок и документ: порядок списков, необъединяемые named-секции, remote-only links,
|
||
синхронный DNS и первый getaddrinfo-адрес, Windows socket init, default-значения и границы,
|
||
повторные опции, поведение неизвестных секций/debug/gui и независимость parser/updater/start.
|
||
Bootstrap invite printer использует конфигурационные адреса и нулевые channel_id/join_key;
|
||
это не снимок фактических bind/NAT-адресов и не invite конкретного канала.
|
||
Нативные сборки/runtime Windows и FreeBSD в этом этапе не выполнялись.
|
||
|
||
Проверки
|
||
- Полный check.sh: 195/195 PASS, 0 failed/0 skipped, proxy9/9, burst1/1, load8/8,
|
||
134217728 байт, 169 секунд; /tmp/config-instance-audit-first-check.log.
|
||
- Профиль 6/6 PASS: config_parser, config_updater, config_debug, reality_config, ncd_config, services.
|
||
- Test_config_parser: 53 ошибочных конфигурации отвергнуты одинаково из файла/буфера;
|
||
10 отказов аллокаций с полным rollback, IPv4/IPv6 CIDR и control order, предельные размеры/порты,
|
||
скрытие секретов и /dev/full при append; баланс памяти сохранён.
|
||
- ASAN/UBSan/LSan: те же 6/6 PASS с detect_leaks=1/ halt_on_error=1.
|
||
Все встроенные lib/src/Opus инструментированы согласованно в отдельной копии
|
||
/tmp/utun-config-instance-asan-20261026; рабочие объекты не смешивались с sanitizer-объектами.
|
||
Первый updater sanitizer-прогон обнаружил обход test mock через glibc __fread_chk;
|
||
checked wrapper добавлен, повторный прогон всех файловых и allocation faults PASS.
|
||
- Логи: /tmp/config-parser-audit-contract.log, /tmp/config-parser-audit-updater.log,
|
||
/tmp/config-parser-audit-debug.log, /tmp/config-parser-audit-reality.log,
|
||
/tmp/config-parser-audit-ncd.log, /tmp/config-parser-audit-services.log.
|
||
Санитайзеры: соответствующие /tmp/config-parser-audit-asan-*.log,
|
||
сборка /tmp/config-parser-audit-asan-build.log и /tmp/config-parser-audit-asan-tests-build.log.
|
||
Общая сборка: /tmp/config-instance-audit-full-build.log.
|