Visual Studio Code 又出現新 Bug 了!
近日,一位名為 na-an 的使用者在使用 Microsoft 的 Visual Studio Code 編輯器(以下簡稱 VS Code)開啟資料夾時,發現其目錄中會自動建立許多帶有無效程式碼的空檔案。隨後,該使用者便將一個相關問題釋出到 VS Code GitHub 儲存庫上,一時間引發了熱烈的討論,不少使用者都表示他們同樣受到了該“漏洞”的困擾。
據顯示,這些自動建立的來及檔案有些檔名長,有些短,且這些檔名並不是有效的 unicode(如圖中的 \312\316\361 是八進位制)。
經過分析之後,發現這些隨機建立的檔案,似乎來自正在執行的程式記憶體轉儲,其中就包含了通常出現在可執行檔案中的字串,以及看起來像是帶有堆疊損壞或越界的指標問題(pointer issue)。
除了瘋狂地建立空檔案外,這次發現的 VS Code “漏洞”還會隨機修改使用者檔案。比如以使用者名稱 daantimmer 打頭的檔案裡所有內容都被清除了,都變成了 0 KB,這個情況是最糟糕的,因為你無法保證是否提前給檔案備份。
當然,該漏洞不僅限於當前的工作區資料夾,它甚至可以清空一些系統檔案/資料夾。
目前,這個漏洞已出現在 Windows 和 Linux 等不同的系統上。據瞭解,該漏洞的“受害者”都有個共同點:他們都寫 C++ 程式碼,使用 VS CODE 的 C++ 擴充套件。因為有使用者發現,當他試圖禁用所有擴充套件後,該問題就消失了;如果將 C++ 擴充套件轉換為穩定版本(1.8.4),問題也會消失。
所以,以上事實均證明了該漏洞的根本原因就在於 VS CODE + C++ 擴充套件 1.9.4 的預釋出版本,因為它暫時不穩定,且具有以上檔案系統缺陷(但是,如果檢查VS CODE 自動更新功能,它將自動更新到 C++ 擴充套件 1.9.4 的預釋出版本)。
當然,C++ 擴充套件的開發人員並不知道 1.9.4 版本究竟哪裡有問題。而記憶體損壞問題似乎又與 C++ 擴充套件中的幾個長期存在但未解決的檔案損壞錯誤有關:α4573 和 5061。
因此,目前的猜測就是:1.9.4 版本意外地使用未初始化的記憶體,且指標問題(pointer issue)引起了一些檔案系統錯誤,因對不遵循現代 C++ 編碼準則的外部第三方子系統進行修改,就會阻止或檢測未初始化指標的使用。
想要解決這個問題的方法很簡單,那就是 —— 別安裝 1.9.4 版本的 C++ 擴充套件。當然,在 1.9.5 、1.9.3、1.8.4 以及新發布的 1.9.6 版本里不存在這個問題。