`Parser::slice` and `Parser::slice_from` can trigger UB in safe Rust via unchecked slicing
还没有人认领这个 Issue。
评估
调研方向
检查 src/tokenizer.rs,尤其是 Parser::slice 和 Parser::slice_from,并追踪 issue 中描述的不安全范围构造。运行仓库现有的测试,然后进行更改并再次运行,最后验证反转、越界、重置和跨 parser 的范围不会再进入未经检查的切片操作。
由索引模型根据 Issue 内容生成。
描述
Parser::slice (and Parser::slice_from) in src/tokenizer.rs calls self.input.get_unchecked(range.start.0..range.end.0) without verifying range.start.0 <= range.end.0 or range.end.0 <= self.input.len():
#[inline]
pub fn slice(&self, range: Range<SourcePosition>) -> &'a str {
debug_assert!(self.input.is_char_boundary(range.start.0));
debug_assert!(self.input.is_char_boundary(range.end.0));
unsafe { self.input.get_unchecked(range.start.0..range.end.0) }
}
Safe callers can trigger undefined behavior without unsafe:
- Passing an inverted range
p1..p0wherep1 > p0(bothis_char_boundaryassertions still pass in debug builds, andend - startunderflows inget_unchecked). - Calling
parser.reset(&saved_state)to rewind the parser position and then callingparser.slice_from(later_pos). - Passing a
SourcePositionobtained from anotherParserwith a longer input string in release builds wheredebug_assert!is disabled.
Replacing unsafe { self.input.get_unchecked(range.start.0..range.end.0) } with &self.input[range.start.0..range.end.0] avoids the soundness issue.
- 主要语言
- Rust
- 星标
- 874
- 派生
- 150
- 平均合并
- 9 分钟
- 30 天内合并 PR
- 1
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
servo/rust-cssparser 的其他 Issue
-
cssparser-color: debug assertion in hsl_to_rgb for a hue that overflows f32可能已有人在做 @BartWaardenburg 于 1 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 64/100
servo/rust-cssparser#460 ·
-
难度 2/5 1-3 小时 新手友好度 88/100
servo/rust-cssparser#440 ·
-
难度 2/5 1-3 小时 新手友好度 85/100
servo/rust-cssparser#439 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 84/100
servo/rust-cssparser#434 ·
-
难度 4/5 3-5 天 新手友好度 45/100
servo/rust-cssparser#438 · 3 条评论 · 1 个 reaction ·
查看 servo/rust-cssparser 的全部 Issue
相似的 Issue
-
checkpoint/verify/rebuild_indexes on a thread holding a WriteTransaction deadlock instead of INT-001未关闭bug known-issue
难度 2/5 1-3 小时 新手友好度 74/100
project-minigraf/minigraf#734 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
-
难度 1/5 1 小时以内 新手友好度 88/100
维护者通常 4 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
bitcoindevkit/electrum_streaming_client#57 ·
维护者通常 2 天内回复