Skip to content

历史键从不一致的全局状态快照计算 #188

Description

@Vantalens

问题描述

getHistoryStorageKey() 顺序读取 5 个全局变量,没有锁定。异步操作可以在读取之间修改这些变量,产生一个从未对应任何实际一致状态的哈希键。

文件位置

  • 文件: public/app.js
  • 行号: 386-394

影响

  • 严重级别: P2(重要)
  • 影响范围: 历史持久化
  • 风险: 历史持久化可能无法检索保存的版本,或为当前文档检索错误的版本

复现步骤

  1. 快速切换输入/输出格式(触发异步操作)
  2. 在切换期间调用 getHistoryStorageKey()
  3. 观察生成的键可能混合了不同状态的值

实际行为

读取 5 个全局变量时状态可能发生变化 → 产生不一致的哈希键

期望行为

原子性地快照所有状态,传递参数而非读取全局变量

修复方案

在调用点快照所有状态,作为参数传递给 getHistoryStorageKey()

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2一般:质量/性能/健壮性问题bugSomething isn't workingmodule:uiui 模块

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions