`HeaderName` implements `Borrow<str>` but doesn't hash like `str`
还没有人认领这个 Issue。
评估
调研方向
从 HeaderName 的 Borrow 和 Hash 实现开始,使用 issue 中的 hash_one 示例来理解不一致之处,并参考 stdlib 的 Borrow 文档了解所需的保证。决定哈希是否应与 as_str() 匹配,或者是否应移除 Borrow,然后验证对 HeaderName 及其借用字符串进行哈希时结果一致,并确认 hashmap 查找行为正确。
由索引模型根据 Issue 内容生成。
描述
Issue
HeaderName implements Borrow<str>, but it's Hash implementation can give different results compared to hashing the string we receive from calling borrow() on it.
Example :
let build_hasher = BuildHasherDefault::<DefaultHasher>::default();
let accept_charset = http::header::ACCEPT_CHARSET;
let borrowed: &str = accept_charset.borrow();
assert!(borrowed == "accept-charset");
assert!(build_hasher.hash_one(borrowed) != build_hasher.hash_one(accept_charset));
This is unexpected, as the stdlib documentation for Borrow says
In particular Eq, Ord and Hash must be equivalent for borrowed and owned values
This causes issues if you put a HeaderName as the key of a "normal" hashmap, because indexing by &str will compile, but be a bug since the hash don't match.
Potential fix
Either:
- add a custom
Hashimplementation forHeaderNamethat hashes to the str value of the header
impl Hash for HeaderName {
fn hash<H: Hasher>(&self, state: &mut H) {
self.as_str().hash(state);
}
}
- remove the Borrow trait implementation. As mentioned in the stdlib documentation,
AsRefis sufficient if the guarantees thatBorrowshould gives cannot be respected. Of course that would be a breaking change...
- 主要语言
- Rust
- 星标
- 1.4k
- 派生
- 382
- 平均合并
- 10 小时 32 分钟
- 30 天内合并 PR
- 2
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
hyperium/http 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 68/100
-
难度 4/5 3-5 天 新手友好度 45/100
-
难度 3/5 1-2 天 新手友好度 62/100
-
难度 3/5 1-2 天 新手友好度 58/100
-
难度 5/5 一周以上 新手友好度 30/100
相似的 Issue
-
awaiting-response bug needs-triage
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 75/100
objectionary/sodg.rs#301 ·
-
难度 2/5 1-3 小时 新手友好度 62/100
HakanSeven12/OpenCADStudio#1706 · 1 条评论 ·
维护者通常 1 天内回复
-
[Bug] Completion info popup (.cm-completionInfo) ignores the configured editor font可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭bug user-priority/P2
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 65/100
rescript-lang/rescript#8765 ·
维护者通常 1 天内回复