Bug: is_idr_nalu 循环可能在帧末尾漏检 NAL 单元 (webrtc.rs:511) #13
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/webrtc.rs:511-531严重性
🟢 低
问题描述
循环条件
while i + 4 < data.len()在i + 4 == data.len()时退出。如果 H.264 帧的最后 4 字节恰好是[0, 0, 1, 0x05](3 字节起始码 + IDR NAL 头),该 NAL 单元会被漏检。虽然实际场景中可能性很低(帧末尾通常是 slice 数据而非独立的 IDR NAL),但作为 NAL 扫描器的正确性仍有欠缺。
建议修复
将循环条件改为
while i < data.len()并在各分支内独立做边界检查:修复方案
已通过 commit
e6e05fb修复。问题根因
while i + 4 < data.len()要求剩余至少 5 字节才进入循环体,导致数据末尾的 3 字节起始码 NAL 单元被跳过。修复内容
while i < data.len(),使用切片tail+starts_with+get()替代手工索引算术let Some(&header) = tail.get(N) else { break }安全处理边界,起始码后无 NAL 头时退出循环测试
新增 10 个单元测试覆盖: