From 5d44c836e7c37d2f957a003d4faefaccf36b9f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sat, 5 Sep 2026 12:55:42 +0300 Subject: [PATCH] Mark legacy history entries --- HISTORY/2026-09-05-file-picker.md | 48 +++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/HISTORY/2026-09-05-file-picker.md b/HISTORY/2026-09-05-file-picker.md index ec69cf2..ae83fef 100644 --- a/HISTORY/2026-09-05-file-picker.md +++ b/HISTORY/2026-09-05-file-picker.md @@ -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`. \ No newline at end of file +- Текущая запись добавлялась отдельными коммитами и отправлялась в + `origin/master`; **LEGACY:** эта формулировка описывает историю публикации, + а не текущую операцию деплоя. \ No newline at end of file