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 版本里不存在这个问题。