Files
transcriber/tasks/items/reject-control-chars-in-extension.md
T
av 11269c1567 учёт: заведён урожай ревью входа по конфигу
- пять задач партии review-2026-08-23: многозначность Remote-Name и Remote-Email,
  мелочи входа, механизация правила о зависимостях конфига, снятие мёртвого
  читателя .env, управляющие знаки в расширении
- две существующие разведки дополнены находками того же прогона: адрес объекта в
  тексте отказа SpeechKit и выводимость имени копии из журнала
2026-08-23 14:03:52 +03:00

46 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🐞 Отвергать расширение с управляющими знаками на приёме, а не отдавать 500
- **Тип:** fix
- **Категория:** Очередь — Вторая половина того же разреза: границы полей журнала задаются там же, где судится состав расширения
- **Зачем:** комментарий кода объявляет этот исход недопустимым и ради него заведён предел длины расширения, но разрез сделан по длине и не сделан по составу знаков: отправитель получает 500, владелец — строку ERROR, неотличимую от аварии хранилища
- **Теги:** review-2026-08-23
Расширение приходит из имени, данного отправителем, и приём судит у него только
длину. Управляющий знак внутри расширения проходит предел длины, доезжает до
заведения временной копии и роняет его: отправитель получает `500` за вход, за
который отвечает сам, а владелец — строку `ERROR`, неотличимую от аварии
хранилища. Ровно этот исход комментарий кода объявляет недопустимым и ради него
заводит предел длины.
Нашёл прогон ревью `config-test-headers-login` 2026-08-23. Триаж тест не
воспроизводил, поэтому находка понижена до гипотезы.
## Воспроизведение
Принять запись, чьё расширение несёт управляющий знак: ответ `500`, в журнале
строка `ERROR`. Ожидался отказ приёма своим кодом.
Падающий тест прохода `adversary`: имя доезжает формой RFC 2231
(`filename*=UTF-8''запись.mp%003`), ответ `500`, журнал
`level=ERROR msg="Failed to stage uploaded file" error="failed to create work file: open /tmp/transcriber-….mp\x003: invalid argument"`.
## Затрагивает
- `internal/service/transcribe.go:171-188` — разрез расширения по длине и сборка
имени копии;
- `internal/adapter/repo/sqlite/file_repo.go:56-67` — заведение временной копии,
которое и отказывает.
## Критерии приёмки
- Приём судит состав знаков расширения так же, как судит длину. **Оракул:** тест
приёма — имя с управляющим знаком в расширении даёт отказ приёма своим кодом,
а не `500`; в журнале нет строки `ERROR` об отказе хранилища.
- Приём принимает годное расширение по-прежнему. **Оракул:** тот же тест — `.mp3`,
`.ogg` и имя без расширения дают прежний исход.
## Рамки
Половину про путь из `*os.PathError` в журнале держит
`journal-fields-bounded-by-service`, здесь она не переписывается.