问题描述
getHistoryStorageKey() 顺序读取 5 个全局变量,没有锁定。异步操作可以在读取之间修改这些变量,产生一个从未对应任何实际一致状态的哈希键。
文件位置
- 文件:
public/app.js
- 行号: 386-394
影响
- 严重级别: P2(重要)
- 影响范围: 历史持久化
- 风险: 历史持久化可能无法检索保存的版本,或为当前文档检索错误的版本
复现步骤
- 快速切换输入/输出格式(触发异步操作)
- 在切换期间调用
getHistoryStorageKey()
- 观察生成的键可能混合了不同状态的值
实际行为
读取 5 个全局变量时状态可能发生变化 → 产生不一致的哈希键
期望行为
原子性地快照所有状态,传递参数而非读取全局变量
修复方案
在调用点快照所有状态,作为参数传递给 getHistoryStorageKey()
关联
问题描述
getHistoryStorageKey()顺序读取 5 个全局变量,没有锁定。异步操作可以在读取之间修改这些变量,产生一个从未对应任何实际一致状态的哈希键。文件位置
public/app.js影响
复现步骤
getHistoryStorageKey()实际行为
读取 5 个全局变量时状态可能发生变化 → 产生不一致的哈希键
期望行为
原子性地快照所有状态,传递参数而非读取全局变量
修复方案
在调用点快照所有状态,作为参数传递给
getHistoryStorageKey()关联