Close media contract audit and record architecture review

This commit is contained in:
evgeny committed 2026-10-24 17:26:12 +02:00
1 parent 5e3701bb2f
commit 9b72a0dadf
2 files changed
+49 -10

No files matched your search

+36 -4
View File
@@ -1,7 +1,9 @@
Аудит media_async / media_delivery — 2026-10-24
Статус: alias encrypted_file, граница voice_file, переанонс SQLite и расхождение MIME write/read исправлены.
Сверка оставшихся общих описаний ещё не завершена. Последнее продолжение и результаты MIME-фикса — в конце.
Ниже сохранены исходное воспроизведение, согласованный проект и результаты исправления encrypted_file.
Сверка двух каталогов завершена: все11 заголовков, sync.md, _desc.txt и encrypted_attachments.md.
Общий service_lifecycle.md проверен в media-части; разделы других сервисов не считаются закрытыми.
Ниже сохранена хронология воспроизведений и исправлений; прежние отметки незавершённости относятся к этапам.
Последние проверки MIME и итоговая архитектурная сверка — в конце.
Подтверждённый дефект: исходник уничтожается через другое имя того же файла
@@ -494,5 +496,35 @@ chat_attachment_send (chat_attachment.c:198..225) имеет такую же с
/tmp/media-mime-fix-profile-logs/, /tmp/media-mime-sanitizer-build-retry.log,
/tmp/media-mime-sanitizer-tests-build.log, /tmp/media-mime-sanitizer-results.log,
/tmp/media-mime-sanitizer-test_*.log. Полный check и Windows/FreeBSD для MIME-фикса не запускались.
encrypted_file.h теперь согласован с реализацией. Остаются общий _desc.txt и сверка
encrypted_attachments.md с chat/UI; общий service_lifecycle за пределами media не входит в этот аудит.
encrypted_file.h теперь согласован с реализацией. Последующая сверка общих описаний завершена ниже.
Завершение аудита media_async/media_delivery — 2026-10-24
- Все11 публичных заголовков двух каталогов сверены по полным функциям и структурам реализаций:
media_async/crypto, attachment/send, encrypted_file, voice_file, media_index/download/delivery/proto,
file_transfer. Уточнены назначения, входы/выходы, владение и потоки, ошибки и wire-ограничения.
- _desc.txt заменён актуальным описанием подготовки, поиска/загрузки, relay, каталога и репликации.
Убраны прежние предположения о RTT-выборе, только прямых соединениях, часовых повторах и ACK-окне.
Отражены фактические QUERY/CM/transfer UUID, пределы выдач, per-group RX-курсор и атомарный приём страницы.
sync.md уточняет отсутствие ожидания HAVE ACK и проверки SQLite при локальном переанонсе.
- encrypted_attachments.md целиком сопоставлен с chat_attachment.c и источниками desktop/Android UI:
inputbar, MessageList/attachment_key_ui, JNI snapshot, ChatRepository, MessageBubble/Reply/ChannelList.
Уточнены MIME, видимость desktop-кнопки при наличии pending requests и preview цитаты после расшифровки.
Контейнер не выдаётся UI как готовый файл; путь/метаданные заменяются после готовности plaintext.
Это сверка исходников, без нового интерактивного GUI/Android runtime-прогона.
- media-раздел service_lifecycle.md сверён по текущему start/quiesce/join/done/destroy и владельцам
worker/temp/CM/relay. Дописано, что ранний MIME-валидатор допустим в uasync и не выполняет I/O.
Общий документ сохраняет частичную отметку: голос, звонки и другие немедийные владельцы вне этой проверки.
- Архитектура исправлений остаётся простой: формат/валидация контейнера принадлежат encrypted_file,
temp/durability — file_io, публикация и БД/UI — задаче chat_attachment; один владелец на ресурс.
Media_index регистрирует подготовленное, delivery проверяет передачу и ведёт каталог своей группы.
Синхронные приём/проверка/сборка delivery в uasync и отсутствие общей транзакции ФС/SQLite
явно описаны как действующие границы. File_transfer оставляет ключи/авторизацию/проверку caller.
- Все четыре воспроизведённых дефекта исправлены и имеют регрессии. Неразобранных подтверждённых
дефектов в рамках этого аудита не осталось. Последние изменения после MIME-прогона — только описания;
git diff --check проходит. Для MIME действуют профиль10/10 и ASAN/UBSan/LSan4/4 выше;
прежние полные185/186 и sanitizer21/21 не приписываются последующим исправлениям.
Коммиты общей сверки:91fed902 (delivery),8d175049 (encrypted/UI/lifecycle).
Чек-лист: все media-заголовки и encrypted_attachments.md — [V], общий service_lifecycle.md — [~].
Windows/FreeBSD, новый полный check и интерактивные GUI/Android проверки не выполнялись.
+13 -6
View File
@@ -4,11 +4,18 @@
## Текущие задачи
[+] **media_async/media_delivery: завершить сверку контрактов и исправлений** — завершено 24.10.2026.
Проверены все11 заголовков двух каталогов по полным реализациям; исправлены alias файлов,
граница voice duration, переанонс SQLite и расхождение MIME. Результаты каждого фикса приведены ниже.
Устаревший _desc.txt заменён описанием текущей архитектуры; уточнены sync.md, encrypted_attachments.md
и media-раздел service_lifecycle.md. Общий lifecycle за пределами media остаётся частично проверенным.
Итог, границы и доказательства: [media_async_audit_findings.txt](media_async_audit_findings.txt).
[+] **encrypted_file: одинаково проверять MIME при записи и чтении контейнера** — исправлено 24.10.2026.
write проверяет только strlen(type)<32 и принимает пустое значение/недопустимые символы,
Прежний write проверял только strlen(type)<32 и принимал пустое значение/недопустимые символы,
тогда как read их отвергает. Пять реальных write/read с теми же ключом/UUID/подписанным hash:
write=0, read=-1; контрольный application/octet-stream проходит полный roundtrip.
chat_attachment_send также проверяет только длину и может принять такой MIME до записи ключа/запуска worker.
Прежний chat_attachment_send также проверял только длину и мог принять такой MIME до записи ключа/запуска worker.
Воспроизведение: /tmp/media-content-type-audit.c и .mk, /tmp/media-content-type-audit.log;
исходники/контейнеры: /tmp/media-content-type-audit-FdtMC3/. Исходный файл не меняется.
Реализован один bounded encrypted_file_validate_type для send/write/read; 1..31 байт,
@@ -19,7 +26,7 @@
./build.sh --no-gui -j4 PASS; профиль10/10 и ASAN/UBSan/LSan4/4 PASS, detect_leaks=1.
Логи: /tmp/media-mime-fix-build.log, /tmp/media-mime-fix-profile-results.log,
/tmp/media-mime-sanitizer-results.log. Полный check и Windows/FreeBSD для этого фикса не запускались.
Подробности: [media_async_audit_findings.txt](media_async_audit_findings.txt). Сверка оставшихся описаний продолжается.
Подробности: [media_async_audit_findings.txt](media_async_audit_findings.txt). Сверка описаний завершена.
[+] **media_delivery: проверять записи SQLite перед переанонсом локальных блоков** — исправлено 24.10.2026.
Прежний announce_local_blocks не проверял длины media_id/block_id, диапазон chunk и полный chat_id.
@@ -37,7 +44,7 @@
Логи: /tmp/media-announcement-fix-profile-results.log, /tmp/media-announcement-fix-sql-final.log,
/tmp/media-announcement-sanitizer-results.log. Полный check и Windows/FreeBSD не запускались.
Архитектура, границы воспроизведения и регрессии: [media_async_audit_findings.txt](media_async_audit_findings.txt).
Сверка описаний двух каталогов ещё не завершена.
Последующая сверка описаний двух каталогов завершена; итог указан в начале списка.
[+] **media_async voice_file: согласовать верхнюю границу длительности с метаданными** — исправлено 24.10.2026.
Прежняя проверка samples/channels/rate >86400 пропускала полные кадры 24ч+20..980мс,
@@ -54,7 +61,7 @@
./build.sh --no-gui -j4 PASS; профильные тесты 10/10 PASS, включая DM, encrypted attachments и video.
Логи: /tmp/media-voice-fix-build.log, /tmp/media-voice-fix-profile-results.log, /tmp/media-voice-fix-profile-logs/.
Подробности и ограничения воспроизведения: [media_async_audit_findings.txt](media_async_audit_findings.txt).
Полный аудит media_delivery ещё не завершён; новые полный check и sanitizer-прогоны не выполнялись.
На этом этапе новые полный check и sanitizer-прогоны не выполнялись; последующие проверки и итог аудита указаны выше.
[+] **media_async encrypted_file: не уничтожать source через alias назначения** — исправлено 24.10.2026.
write/read отвергают только одинаковые строки; /./ и hardlink обходят проверку одного файла.
@@ -72,7 +79,7 @@
Профильные21/21 и основной make check185/185 PASS; proxy9/9, burst1/1, load8/8 PASS
в отдельном network namespace,134217728 проверенных байт. ASAN/UBSan/LSan21/21 PASS, detect_leaks=1.
Логи: /tmp/media-fix-full-check.log, /tmp/media-fix-network-check.log, /tmp/media-fix-sanitizer-results.log.
Полный аудит остальных контрактов media_async/media_delivery ещё не завершён; Windows/FreeBSD не проверялись.
Последующий аудит остальных контрактов media_async/media_delivery завершён; Windows/FreeBSD не проверялись.
[+] **Proxy: исправить HUP/backpressure, владение и rollback** — завершено 24.10.2026.
Согласованный проект, причины и результаты: [doc/proxy_fix_plan.txt](proxy_fix_plan.txt).