Запрещен ли символ in в именах файлов для репозиториев Git?

Без учета какого-либо поведения реализации или хоста by есть ли в дизайне символы, которые не допускаются в именах файлов или каталогов?

Мне особенно интересно (учитывая, что Git иногда используется как front-end), разрешен ли символ ᴀꜱᴄɪɪ ɴᴜʟ.
Если это не разрешено, может ли попытка создать такой файл с повышенной надежностью к удаленному выполнению кода?

1 ответ

Да. Индекс и объекты дерева накладывают ограничения из-за их дизайна:

  1. NUL не может быть в пути. git использует строки с нулевым символом в конце для внутреннего хранения имен файлов, как в индексе, так и в объектах дерева.

  2. / не может быть в имени файла, так как это разделитель пути в индексе.

У клиентов Git есть дополнительные ограничения, которые не являются частью дизайна форматов файлов данных:

  1. Компонент пути не может быть назван .git,

  2. Компонент пути не может быть назван . или же .., чтобы помешать вам избежать вашего рабочего каталога.

  3. Если core.protectHFS Если все символы Unicode нулевой ширины удалены из компонента пути, остаток может не .git,

  4. Если core.protectNTFS установлен, тогда компонент пути может не быть GIT~1, .git\ или же .git с последующими пробелами или точками.

И нет, вы также не можете создавать их с помощью libgit2, потому что он также использует строки с нулевым символом в конце для хранения путей. Кажется маловероятным, что здесь есть потенциал переполнения буфера (во всяком случае, вы ожидаете переполнения буфера).

Другие вопросы по тегам