2015-10-02 43 views
1

在不考慮任何實現行爲或主機ᴏꜱ的情況下,在設計中是否存在文件或目錄名中不允許的字符?Git存儲庫的文件名中禁止使用ɴᴜʟ字符嗎?

我特別感興趣(考慮Git有時用作前端)如果允許ᴀꜱᴄɪɪɴᴜʟ字符。
如果不允許這樣做,那麼可以嘗試創建具有堅固性的文件導致遠程代碼執行?

+0

**不!這不是太寬泛!**如果有不允許的字符,則有**確定的答案!** *(是的,它是)*。 **否則,請解釋如何在ɢɪᴛ資料庫中插入包含ɴᴜʟ字節的文件名!** – user2284570

+0

您的標題詢問NUL是否被允許;問題的主體詢問某些人物是否被允許。由於現有的答案是「是」,這意味着某些字符被禁止,所以我已經相應地改寫了標題。 (我也用普通大寫字母替換了小寫字母;在某些系統中,非ASCII字符可能難以讀取。) –

回答

4

是的。該指數和樹對象都施加了限制,因爲它們的設計:

  1. 一個NUL不能在路徑名。 git使用空終止的字符串在內部存儲文件名,包括in the indextree objects

  2. A /不能在文件名中,因爲它是索引中的路徑分隔符。

有通過GIT中的客戶強加額外限制,這是不的數據文件格式設計的一部分:

  • 路徑組件不能被命名.git

  • 路徑組件可能不會被命名爲...,以防止您逃脫工作目錄。

  • 如果core.protectHFS已設置,則從路徑組件中刪除所有zero-width Unicode characters時,其餘的可能不是.git

  • 如果core.protectNTFS被設置,那麼路徑組件可能不是GIT~1.git\.git後面有尾隨空格或點。

  • 不,你不能創建那些libgit2要麼,因爲它使用空終止字符串存儲路徑。這裏似乎不太可能存在緩衝區溢出的可能性(如果有的話,你會期望緩衝區不足)。

    +0

    錯誤! A'/'可以在[git repositories](https://github.com/jch/html-pipeline)中使用。如果你[克隆這個](https://github.com/jch/html-pipeline),包含'/'的目錄將被轉換爲2個不同的目錄。在本地克隆的repo上執行'git update'會將目錄分割成大部分ᴏꜱ。 – user2284570

    +1

    你在說'lib/html'嗎?這是一個帶有'html'目錄的'lib'目錄。 GitHub在他們的網絡用戶界面中折服了這一點 - 這就是爲什麼'lib /'是灰色的。 –

    +0

    你的意思是這是自動的嗎?對不起,在這種情況下... – user2284570

    相關問題