HeaderHash 清除和复制后可能会保留过时的案例索引
作者: OskarEichler创建于 2026年8月30日更新于 2026年8月30日
`Puma::Util::HeaderHash` 在 `@names` 中保存了一个内部小写到原始名称的索引,但继承的 `Hash#clear` 没有清除它,而继承的浅层 `dup` 则共享了它。在 `clear` 之后, `include?` 可能会声称已删除的头部仍然存在;修改重复或重叠的合并可能会破坏原始不区分大小写的查找。一个狭义的修复增加了 `initialize_copy` 来重复 `@names` 和 `clear` 来重置哈希和索引,同时保留了正常的冻结哈希错误行为。
内容来源: puma/puma