учёт: заведён урожай ревью входа по конфигу
- пять задач партии review-2026-08-23: многозначность Remote-Name и Remote-Email, мелочи входа, механизация правила о зависимостях конфига, снятие мёртвого читателя .env, управляющие знаки в расширении - две существующие разведки дополнены находками того же прогона: адрес объекта в тексте отказа SpeechKit и выводимость имени копии из журнала
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# 🐞 Отвергать расширение с управляющими знаками на приёме, а не отдавать 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`, здесь она не переписывается.
|
||||
Reference in New Issue
Block a user