Запрещен ли символ in в именах файлов для репозиториев Git?
Без учета какого-либо поведения реализации или хоста by есть ли в дизайне символы, которые не допускаются в именах файлов или каталогов?
Мне особенно интересно (учитывая, что Git иногда используется как front-end), разрешен ли символ ᴀꜱᴄɪɪ ɴᴜʟ.
Если это не разрешено, может ли попытка создать такой файл с повышенной надежностью к удаленному выполнению кода?
1 ответ
Да. Индекс и объекты дерева накладывают ограничения из-за их дизайна:
NUL
не может быть в пути. git использует строки с нулевым символом в конце для внутреннего хранения имен файлов, как в индексе, так и в объектах дерева./
не может быть в имени файла, так как это разделитель пути в индексе.
У клиентов Git есть дополнительные ограничения, которые не являются частью дизайна форматов файлов данных:
Компонент пути не может быть назван
.git
,Компонент пути не может быть назван
.
или же..
, чтобы помешать вам избежать вашего рабочего каталога.Если
core.protectHFS
Если все символы Unicode нулевой ширины удалены из компонента пути, остаток может не.git
,Если
core.protectNTFS
установлен, тогда компонент пути может не бытьGIT~1
,.git\
или же.git
с последующими пробелами или точками.
И нет, вы также не можете создавать их с помощью libgit2, потому что он также использует строки с нулевым символом в конце для хранения путей. Кажется маловероятным, что здесь есть потенциал переполнения буфера (во всяком случае, вы ожидаете переполнения буфера).