Mark legacy history entries
This commit is contained in:
@@ -1,5 +1,16 @@
|
||||
# 2026-09-05 — browser file-picker и иерархическое дерево
|
||||
|
||||
> **Статус документа:** исторический журнал изменений. Устаревшие промежуточные
|
||||
> состояния помечены `LEGACY`; исправленные дефекты помечены `RESOLVED`.
|
||||
|
||||
## Текущее состояние
|
||||
|
||||
- **Актуальная версия:** `0.1.9`.
|
||||
- **Актуальная архитектура:** browser-only file-picker без VM upload, backend
|
||||
sessions и upload API.
|
||||
- **Актуальный commit:** `1e30548 Fix async picker race`, отправлен в
|
||||
`origin/master`.
|
||||
|
||||
## Исходная задача
|
||||
|
||||
- Требовался браузерный выбор документов в `upload-platform`.
|
||||
@@ -13,7 +24,11 @@
|
||||
- Ограничения по размеру и количеству файлов не добавлялись.
|
||||
- Должны поддерживаться вложенные структуры: `folder -> ZIP -> subfolder -> ZIP -> file`.
|
||||
|
||||
## Реализовано
|
||||
## Реализовано на этапе версии 0.1.7 — LEGACY
|
||||
|
||||
> **LEGACY:** раздел фиксирует состояние на момент версии `0.1.7`, а не текущий
|
||||
> состав кода. Для актуального состояния см. раздел «Текущее состояние» и
|
||||
> последующие исправления ниже.
|
||||
|
||||
- Удалён VM upload layer: PUT на внешний VM endpoint, pull, backend sessions и upload API.
|
||||
- Удалены старые backend/API части upload-platform по явному запросу:
|
||||
@@ -100,7 +115,11 @@
|
||||
- Повторный выбор того же файла после удаления снова разрешён.
|
||||
- Изменения не затрагивают фильтрацию расширений, ZIP-рекурсию и публичный API picker.
|
||||
|
||||
## Жёсткие тесты по плану — 2026-09-05
|
||||
## Жёсткие тесты по плану — 2026-09-05 — HISTORICAL SNAPSHOT
|
||||
|
||||
> **HISTORICAL SNAPSHOT:** результаты ниже относятся к тестовому проходу до
|
||||
> исправления traversal. Актуальная повторная проверка приведена в разделе
|
||||
> «Повторная проверка» и в последующих записях.
|
||||
|
||||
### PASS
|
||||
|
||||
@@ -115,18 +134,28 @@
|
||||
- Выбор папки с одинаковыми именами в разных каталогах сохраняет оба файла.
|
||||
- Рабочее дерево Git после тестов осталось чистым.
|
||||
|
||||
### FAIL
|
||||
### FAIL — RESOLVED / LEGACY RESULT
|
||||
|
||||
> **RESOLVED:** перечисленные FAIL описывают состояние до исправления traversal
|
||||
> и не являются текущими дефектами. Раздел сохранён как исторический результат
|
||||
> тестирования.
|
||||
|
||||
- ZIP entry `folder/../../escape.txt` попадает в дерево с тем же traversal-путём.
|
||||
- ZIP entry `/absolute.md` попадает в дерево с двойным слэшем `archive.zip//absolute.md`.
|
||||
- Пути с `..` создают видимые группы `..`.
|
||||
- Путь `<пустая часть>/absolute.md` создаёт группу с пустым отображаемым именем.
|
||||
|
||||
### Вывод
|
||||
### Вывод — LEGACY
|
||||
|
||||
> **LEGACY:** это вывод на момент обнаружения дефекта; после исправления
|
||||
> traversal он больше не описывает текущее состояние.
|
||||
|
||||
Фильтрация расширений, XSS-экранирование, дедупликация и обработка пустых/глубоких ZIP работают. Обнаружен отдельный дефект нормализации ZIP-путей: перед построением дерева нужно отклонять абсолютные пути, `..`, пустые сегменты и backslash traversal. В текущем тестовом проходе код не менялся; FAIL оставлен документированным для следующего исправления.
|
||||
|
||||
## Git
|
||||
## Git — HISTORICAL REFERENCES
|
||||
|
||||
> **HISTORICAL REFERENCES:** ссылки ниже перечисляют коммиты этапов разработки,
|
||||
> а не являются текущим состоянием ветки. Текущий commit указан в начале файла.
|
||||
|
||||
## Исправление traversal — 2026-09-05
|
||||
|
||||
@@ -140,13 +169,14 @@
|
||||
- Отклоняются пустые entry, абсолютные пути, backslash, `.`, `..` и пустые сегменты.
|
||||
- Пути и имена leaf-файлов строятся только из проверенных сегментов.
|
||||
- Вложенный ZIP с опасным путём пропускается без прерывания обработки внешнего ZIP.
|
||||
- Версия повышена до `0.1.8`.
|
||||
- Версия на момент исправления повышена до `0.1.8`; **LEGACY:** текущая версия
|
||||
уже `0.1.9` после исправления async race.
|
||||
|
||||
### Повторная проверка
|
||||
|
||||
ZIP с `folder/../../escape.txt`, `/absolute.md`, `windows\\..\\bad.txt`, `folder/./dot.txt` и безопасным `safe/normal.txt` оставил только `paths.zip/safe/normal.txt`. Группы `..`, пустая группа и абсолютный путь больше не отображаются. Результат: `1 файлов · 2 B`.
|
||||
|
||||
## Исправление async race — 2026-09-05
|
||||
## Исправление async race — 2026-09-05 — АКТУАЛЬНО
|
||||
|
||||
### Причина
|
||||
|
||||
@@ -170,4 +200,6 @@ ZIP с `folder/../../escape.txt`, `/absolute.md`, `windows\\..\\bad.txt`, `folde
|
||||
- `85605fe Remove VM upload layer; keep file picker only` — удаление VM upload и переход к picker-only.
|
||||
- `a965f18 Add hierarchical file picker` — иерархическое дерево, вложенные ZIP, удаление групп и файлов.
|
||||
- До добавления этой записи `master` был синхронизирован с `origin/master`.
|
||||
- Текущая запись добавляется отдельным коммитом и отправляется в `origin/master`.
|
||||
- Текущая запись добавлялась отдельными коммитами и отправлялась в
|
||||
`origin/master`; **LEGACY:** эта формулировка описывает историю публикации,
|
||||
а не текущую операцию деплоя.
|
||||
Reference in New Issue
Block a user