文 | 罗奇奇
出品 | OSC开源社区(ID:oschina2013)
近日, 用户 na-an 发现:使用微软的 VSCode 编辑器打开文件夹时,目录中会自动生成许多带有无效代码的空文件。该用户随即在 VSCode GitHub 仓库中发布了相关 Issue(https://github.com/microsoft/vscode/issues/145297),随机引发了热烈讨论,很多用户表示自己也饱受该 Bug 的困扰。有些文件名称很短,有些名称很长,这些文件的名称不是有效的 unicode ,比如图中的 \312\316\361 是八进制。随机创建的文件似乎来自正在运行的进程内存转储,包含一些通常出现在可执行文件中的字符串,看起来像指针出现了堆栈损坏或越界问题。最可怕的是,除了疯狂创造空文件外,VSCode 还会随机修改用户文件,比如用户 daantimmer 的所有头文件的内容都被清了,通通变成 0 KB(希望有备份🙏)该 Bug 的影响范围不限于当前的工作区文件夹,它甚至能清空一些系统文件/文件夹:该 Bug 在 Windows 和 Linux 等不同系统中都出现过,但受害者有一个非常有趣的共同点:他们都写 C++ 代码,并使用 VSCode 的 C++ 扩展。有人尝试把所有扩展禁用所有扩展后,问题就消失了;如果将 C++ 扩展切换到稳定版本(1.8.4),问题也会消失。如此一来就破案了( issues 9041),原来 Bug 的源头是 VSCode C++ 扩展 1.9.4 预发行版本,该版本并不稳定,出现了上述的文件系统 Bug。但如果用户勾选了 VSCode 自动更新功能,则会自动更新到预发行的 C++ 扩展 1.9.4 版本。然而,C++ 扩展的开发者也不知道 1.9.4 版本具体到底是哪里出现了问题,该内存损坏问题似乎跟 C++ 扩展早已存在,但无法解决的几个文件损坏 Bug: #4573 和 #5061 有关。目前的推测是 1.9.4 版本意外使用了未初始化的内存,由于修改了不遵循现代 C++ 编码指南的外部第三方子系统,可能会阻止或检测到未初始化指针的使用,指针问题导致出现了一些文件系统的问题。用户解决该问题的方法也很简单,不再安装 1.9.4 版本的 C++ 扩展即可,1.9.5、1.9.3 、 1.8.4,或是 最新发布的 1.9.6 版本都不存在该问题。