Bug fs::openFile 分配了重复的 ID,导致内存泄漏和数据损坏
作者: itssagarK创建于 2026年4月1日更新于 2026年9月13日
标签bug
fs::openFile 函数使用 openedFiles 映射的当前大小来确定下一个文件流 ID:
int virtualFileId = openedFiles.size();一旦文件被打开和关闭不连续,就会出现问题。以下是发生的情况:
- 打开文件 A → 获得 ID 0(映射大小现在为 1)
- 打开文件 B → 获得 ID 1(映射大小现在为 2)
- 关闭文件 A → 映射大小降至 1
- 打开文件 C →
openedFiles.size()返回 1 → 文件 C 获得 ID 1
现在,文件 C 具有与文件 B 相同的 ID。ID 1 的映射项被重写为文件 C 的指针 - 文件 B 的 ifstream* 从未被释放(内存泄漏),并且使用文件 B 的 ID 的任何 JS 读取操作将会默默地从文件 C 中读取数据。
内容来源: neutralinojs/neutralinojs