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