実装の動作やホスト ᴏꜱ を考慮せずに、設計上、ファイル名またはディレクトリ名で許可されていない文字はありますか?
ᴀꜱᴄɪɪ ɴᴜʟ 文字が許可されている場合、私は特に興味があります (Git がフロントエンドとして使用されることを考えると) 。
これが許可されていない場合、堅牢なファイルを作成しようとすると、リモートでコードが実行される可能性がありますか?
実装の動作やホスト ᴏꜱ を考慮せずに、設計上、ファイル名またはディレクトリ名で許可されていない文字はありますか?
ᴀꜱᴄɪɪ ɴᴜʟ 文字が許可されている場合、私は特に興味があります (Git がフロントエンドとして使用されることを考えると) 。
これが許可されていない場合、堅牢なファイルを作成しようとすると、リモートでコードが実行される可能性がありますか?
はい。インデックス オブジェクトとツリー オブジェクトの両方に、その設計による制限があります。
パス名にANUL
を使用することはできません。git は null で終了する文字列を使用して、インデックスとツリー オブジェクトの両方にファイル名を内部的に保存します。
A/
はインデックス内のパス区切りであるため、ファイル名に含めることはできません。
Git クライアントによって課せられる追加の制限がありますが、これはデータ ファイル形式の設計の一部ではありません。
パス コンポーネントに名前を付けることはできません.git
。
作業ディレクトリをエスケープできないように、パス コンポーネントに.
またはという名前を付けることはできません。..
core.protectHFS
が設定されている場合、幅がゼロの Unicode 文字がすべてパス コンポーネントから削除されると、残りは にならない可能性があります.git
。
が設定されている場合core.protectNTFS
、パス コンポーネントは ではないかGIT~1
、末尾にスペース.git\
または.git
ドットが続くことはありません。
いいえ、libgit2 でもパスを保存するためにnull で終了する文字列を使用するため、それらを作成することはできません。ここでバッファ オーバーランが発生する可能性は低いと思われます (どちらかと言えば、バッファ アンダーランが発生する可能性があります)。