unsafe: drain_encoder 中使用 from_raw_parts 应添加 SAFETY 注释 (avhw.rs) #5
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
位置
src/avhw.rs:868-876严重性
🟢 低
问题描述
ffmpeg-next8.x 的ff::Packet类型可能提供了安全的data()方法(返回Option<&[u8]>),应优先使用安全 API 来消除unsafe块。当前直接通过from_raw_parts读取(*pkt.as_mut_ptr()).data和.size虽然功能正确(avcodec_receive_packet刚成功返回),但缺少 SAFETY 注释,不符合最小化 unsafe 代码的原则。建议修复
添加 SAFETY 注释,后续考虑迁移到安全 API:
修复方案
提交:
fd170b6问题:
drain_encoder中std::slice::from_raw_parts缺少 SAFETY 注释,且存在两个潜在 soundness 风险:pkt.size为负数时as usize会包装成巨大值pkt.data为 null 时from_raw_parts(null, 0)是 UB修复:
size > 0 && !data.is_null()运行时守卫未改动:
let _ = tx.send(...)的错误静默问题由 #6 单独追踪。