Record verified media primitive fixes and remaining location audit
This commit is contained in:
1 parent
64519c41a7
commit
ad0505bd31
1 file changed
+21
-12
+21
-12
@@ -4,18 +4,27 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[ ] **media_async: файловые примитивы и точные контракты .h** — аудит 22.10.2026:
|
||||
ma_copy_file проверяет только strcmp: source и ./source обнуляют исходный файл (14→0 байт), возврат 0.
|
||||
Одинаковые строки несуществующего пути также дают 0 без проверки источника; правила перезаписи/ошибок не описаны.
|
||||
ma_uuid игнорирует отказ RAND_bytes: при внедрённой ошибке буфер остаётся прежним, вызывающий не получает ошибку.
|
||||
ma_dir_walk молча возвращает 0 для отсутствующего каталога/обычного файла; ошибки opendir/lstat/readdir не передаются.
|
||||
Windows-ветка рекурсирует по DIRECTORY без проверки REPARSE_POINT; regular-only контракт .h требует уточнения/реализации.
|
||||
ma_file_size сужает st_size до int: 3 ГиБ возвращают -1073741824. Ограничение int в .h указано,
|
||||
но вызывающие media_index/chat_msg используют результат как int64_t: расширение после вызова не восстанавливает размер.
|
||||
В .h уточнить синхронные done при отказе, -2 также для неверных аргументов/closing, отсутствие callback при done=NULL,
|
||||
лимит 16 задач до доставки done (включая завершённые workers), размеры ключа/подписи и отсутствие отката побочных эффектов work.
|
||||
Порядок join→cancel post→done при destroy сверён с uasync и doc/service_lifecycle.md; описание этого порядка соответствует коду.
|
||||
Стенд вне репозитория: /tmp/media-async-audit.c; результаты: /tmp/media-async-audit.log. Реализация не менялась.
|
||||
[+] **media_async: файловые примитивы и точные контракты .h** — исправлено 22.10.2026:
|
||||
ma_copy_file проверяет существование/идентичность, сохраняет один regular-файл при ./ или hardlink;
|
||||
ссылки назначения отклоняются, копирование идёт через соседний temp с проверенными записью/close/publish.
|
||||
Общие примитивы lib/file_io используются также video, сохраняя публикацию видео только в completion.
|
||||
ma_uuid возвращает ошибку RNG и обнуляет выход; media_index не записывает результат при отказе media/block UUID.
|
||||
ma_file_size и переменные вызывающего кода — int64_t; проверяются смещения, число блоков и размеры выделений.
|
||||
Обход передаёт ошибки, пропускает ссылки/reparse points, проверяет длину/глубину; Windows использует wide API.
|
||||
Контракты .h и service_lifecycle описывают синхронные отказы, лимит 16 до completion и отсутствие отката work при отмене.
|
||||
Неверные аргументы дают -1, closing/destroy — CANCELLED; повторный вход в destroy диагностируется и отклоняется.
|
||||
Новый test_media_primitives проверяет сохранность при I/O/fdopen ошибках, RNG/seek без записей в БД,
|
||||
sparse-размеры на границах 2/4 ГиБ, ошибки обхода, ссылки/глубину и ownership задач с внедрением ошибок.
|
||||
Все шесть тестов media_primitives/video/media_index/attachment_send/services/dm_worker прошли ASAN/UBSan с detect_leaks=1.
|
||||
Общий check.sh: 176/176 и proxy/burst/load. Windows runtime/сборка не проверялись: кросс-компилятора в окружении нет.
|
||||
Логи: /tmp/media-primitives-full-check-final.log, /tmp/media-primitives-final.log, /tmp/media-asan-test_*.log.
|
||||
|
||||
[ ] **media_index_commit: не обрезать длинный location** — статическая проверка 22.10.2026:
|
||||
Относительный dest_path записывается через snprintf в location[512] без проверки длины;
|
||||
register_async допускает dest_path до 1023 байт, а media_base может не сокращать его до 511 байт.
|
||||
При таком пути в БД попадёт обрезанное имя. Проверить сценарий на реальном вложенном пути,
|
||||
затем отклонять непредставимый location до INSERT либо согласовать размеры со всеми читателями.
|
||||
Найдено при сверке вызывающего кода media_async; воспроизведение и исправление отложены.
|
||||
|
||||
[+] **test_stream_service: убрать зависимость bootstrap-проверки от гонки TCP-handshake** — исправлено 22.10.2026:
|
||||
Падение на строке 409: REINIT=0 при probes=1/subflows=1/failures=0 и доставленной первой пачке.
|
||||
|
||||
Reference in new issue
Block a user