str::repeat曝安全漏洞
官方目前正在申请CVE,目前官方已经修复此漏洞,将在9.25发布Rust 1.29.1中稳定此修复。
标准库中的str :: repeat
函数允许重复字符串固定次数,返回最终的字符串。最终字符串的容量通过相乘来计算
字符串的长度,这个计算可能会溢出。
str :: repeat
的其余实现包含不安全的代码,它依赖于具有计算容量的预分配Vec。在整数溢出时,预分配容量将小于实际需要的容量,然后在分配的缓冲区之外写入,导致缓冲区溢出。
这个漏洞和VecDeque那个类似。
受影响的版本
虽然str :: repeat
函数自1.16.0以来一直存在于Rust中,但是这个
漏洞被引入标准库中是在2018年5月10日发布的1.26.0稳定版中。
事后诸葛亮:
查看了一下修复的代码,问题主要是在 slice::repeat方法中。
修复代码就简单了,加检查就好,整数溢出即panic
let mut buf = Vec::with_capacity(self.len().checked_mul(n).expect("capacity overflow"));
Niko工作时间:使用GDB调试Rust代码
Rayon的力量
作者在工作中使用sklearn(一个Python第三方提供的非常强力的机器学习库)的内置工具进行余弦相似度查询,并行性不足,并且会产生很多OOM(内存不足)错误。他们还使用了Gensim和一些其他工具,往往会使用大量内存。
最终他厌倦了这一切,拿起了Rust,装备了Serde,序列化了查询所用的JSON矩阵,架起了Rayon,最终得到了一个成功的并行故事。 480G的内存只用了不到3G。
在FFI中进行不安全的冒险
可以算作一个FFI和Unsafe的教程
RPCS3 仿真器进度报告
通过gfx-rs支持了macOS
一次项目编程语言选择之旅
作者要为新项目选择语言,考量了诸多语言的特点,最终选了Rust。可以看看他的思考过程。
C++ Lifetime profile v1.0 发布
用于检测C++代码中 悬空指针/迭代器/ string_views / spans /等常见情况。
估计是跟Rust学的
新库 cargo-stabilize
可以帮助开发者将Cargo.toml中所有使用通配符标注的crate替换为最新版,包含依赖项
评论区
写评论还没有评论