From 108dfae82b3aafe87fd5e3a41421cb5fd55bcbb3 Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 22 Oct 2026 18:45:19 +0200 Subject: [PATCH] Record reproduced media block receive and completion defects --- doc/tasks.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/doc/tasks.md b/doc/tasks.md index d762fd51..1b8e51f3 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -101,6 +101,30 @@ Неиспользуемые chunk/rtt удалены из нового формата QUERY_RESP. Блок однозначно задаётся block_id, а его номер загрузчик берёт из сохранённых метаданных; позиция в выборочной пачке не считается номером блока. +[ ] **media_delivery CHUNK: прогресс только после проверенного приёма и записи** — воспроизведено 22.10.2026: + Реальные router callbacks/SQLite, корректные подпись блока и ключ автора. CHUNK с data_len=1 без payload + оставляет файл пустым, но устанавливает bytes_received=1, RECV и обновляет last_progress_tb. + То же при внедрённом fwrite=0/ENOSPC. Текущий unit-тест допускает 456 байт при expected_size=100. + Проверять полный payload, геометрию/непрерывность, текущего держателя и попытку до файловых операций; + не считать дубли и неудачную запись прогрессом. Нужна привязка пакетов к отдельной попытке передачи блока. + Стенд /tmp/media-block-audit.c; логи /tmp/media-block-audit-truncated.log, /tmp/media-block-audit-write.log. + +[ ] **media_delivery DONE: проверка ключа и конечный результат ошибки хеша** — воспроизведено 22.10.2026: + Для настоящей Ed25519 пары с pubkey[0]=0 корректно подписанный блок отвергается: наличие ключа определяется + первым байтом. При отсутствии ключа проверка заменяется сравнением wire block_sig с метаданными. + Отдельно: при верной подписи блока и несовпадающем хеше файла state=DONE, validated=0/1, active=1; + три проверки watchdog возвращают 0, done не вызывается. Итоговая ошибка должна завершать загрузку, + а публикация назначения и регистрация допустимы только после проверенных чтения/записи/close/SHA256. + Логи /tmp/media-block-audit-keyzero.log, /tmp/media-block-audit-hash.log; реализация не менялась. + +[ ] **media_delivery progress_cb: отмена освобождает dl внутри обработчика DONE** — подтверждено ASAN 22.10.2026: + progress_cb вызывает media_download_cancel, md_dl_finish освобождает dl; media_download_handle_done затем + вызывает md_dl_send_have_block с освобождённым указателем. ASAN heap-use-after-free, чтение 8 байт. + Уведомление должно быть последним обращением обработчика к внешнему коду; финализация имеет собственный + отменяемый шаг, done вызывается ровно один раз после снятия timers/CM/relay/waiters и удаления из индекса. + Проверить также отмену с повторным start того же media_id, отмену на последнем progress и поздние пакеты. + Лог /tmp/media-block-audit-cancel-asan.log; стенд вне репозитория /tmp/media-block-audit.c. + [+] **test_stream_service: убрать зависимость bootstrap-проверки от гонки TCP-handshake** — исправлено 22.10.2026: Падение на строке 409: REINIT=0 при probes=1/subflows=1/failures=0 и доставленной первой пачке. Встречный TCP-линк успевает сообщить peer_reset_id до ETCP CONFIRM: начальная эпоха уже известна,