Backup: сократить копирование буферов импорта и экспорта без смены формата
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 38/100
Línea de trabajo
Start with SettingsViewModel.OpenBackup and BackupArchive.Decrypt, then trace the export serialization and existing tests related to #334. Check the current archive format, size limits, authentication behavior, and storage handling before changing buffer ownership. Done means preserving v1 compatibility and safe export guarantees, passing the specified boundary and failure tests, and confirming lower allocations with a repeatable isolated benchmark.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Проблема
SettingsViewModel.OpenBackup загружает файл в растущий MemoryStream, затем делает ToArray(). BackupArchive.Decrypt дополнительно выделяет plaintext размером с payload. Экспорт сначала создаёт полный JSON-массив, затем отдельный массив результата. Лимит экспорта проверяется только после полной сериализации.
Измерения
Windows x64, .NET 10.0.7 Release, без tiered compilation; два прогрева, медиана семи повторов. Синтетический набор: 200 профилей с отдельными конфигурациями по 128 КиБ, JSON около 25,1 МиБ.
- Чтение в памяти + текущая расшифровка: 100,58 мс, 164,58 МиБ аллокаций.
- C#-прототип с заранее выделенным буфером, без
ToArray()и с расшифровкой на месте: 83,93 мс, 75,47 МиБ. - Текущий экспорт: 83,58 мс, 113,78 МиБ.
- Сериализация в поток с последующим шифрованием на месте: 83,41 мс, 65,84 МиБ.
- Отказ текущего экспорта для набора с примерно 38 МиБ исходных конфигураций всё равно выделяет около 165 МиБ.
Аллокации суммарные, не пик RAM. Реальный диск, Avalonia storage providers, получение секретов и полное восстановление не измерялись. Прототипы совместимы с текущим форматом; выигрыш по времени для небольших наборов не установлен.
Решение
Оптимизировать буферы в C#, сохранив формат v1, лимит 32 МиБ, AES-GCM, PBKDF2, AAD и обработку ошибок. При достоверно известной длине заранее выделять буфер после проверки лимита; для потока неизвестной длины использовать ограниченное накопление. Исключить ToArray() перед расшифровкой, рассмотреть шифрование/расшифровку на месте в буфере с эксклюзивным владением. Ограничивать сериализацию в процессе записи, до неограниченного роста результата.
Готово, когда
- Старые архивы читаются, новые читаются прежней реализацией; заголовок, версии и криптографические параметры совместимы.
- Тесты проверяют неверный пароль, повреждение, усечение, точную границу размера и превышение лимита для потоков с известной и неизвестной длиной.
- Plaintext не выдаётся вызывающему коду до успешной аутентификации и не пишется во временные файлы; принадлежащие компоненту временные секретные буферы очищаются на ошибках.
- Сохраняются гарантии безопасного экспорта, исправленные в #334; особенности
IStorageFileне обходятся предположением о локальном пути. - Повторяемый изолированный бенчмарк подтверждает снижение аллокаций; измерения отделены от пика RAM и дискового I/O.
Связано с #18 и #334. Смена языка, новый блочный формат, сжатие и ослабление KDF не входят в задачу. Все проверки — BYDLO_SAFE_DEV=1, фейки, без движков и изменения сети.
- Lenguaje dominante
- C#
- Estrellas
- 5
- Forks
- 1
- Merge medio
- 30 min
- PR fusionados (30 d)
- 171
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de endercodezz/BYDLO
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
endercodezz/BYDLO#396 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
endercodezz/BYDLO#395 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 48/100
endercodezz/BYDLO#393 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 15/100
endercodezz/BYDLO#392 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
endercodezz/BYDLO#388 ·
Los mantenedores suelen responder en 1 día
Todos los issues de endercodezz/BYDLO
Issues similares
-
needs attention untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet#3666 ·
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
stryker-mutator/stryker-net#3974 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
JiaFeiMiao-K-Cat/DiscImageStudio#171 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
DDOS VulnerbilityAbiertoS: Untriaged
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
DeltaV-Station/Delta-v#6711 ·
Los mantenedores suelen responder en 1 día