src/state_portal.rs:163-173
🟢 低
main.rs 虽然已校验 output.is_none() && port == 0 的组合,但在 StatePortal::new 被库代码或测试直接调用时,该 expect 会导致 panic 而非可恢复的错误。
main.rs
output.is_none() && port == 0
StatePortal::new
expect
改为 bail! 以返回 Result::Err,保持 API 的健壮性:
bail!
Result::Err
avhw::SwEncState::new( &drm_path, std::path::Path::new(self.args.output.as_deref().ok_or_else(|| anyhow::anyhow!("output required for MP4 mode"))?), // ... )?
将 state_portal.rs 中两处 expect() 替换为 ok_or_else(..)? 错误传播,与函数返回类型 Result 及已有的 bail! 用法保持一致。
1. webrtc_paused 解包(原第 167 行)
将 expect 改为 ok_or_else + ?,错误信息:internal invariant broken: webrtc_paused missing while WebRTC mode is active
2. output 解包(原第 184 行)
将 expect 改为 ok_or_else + ?,错误信息:--output is required in MP4 file output mode; use --port > 0 for WebRTC mode
Commit: d5679be
d5679be
No dependencies set.
The note is not visible to the blocked user.
位置
src/state_portal.rs:163-173严重性
🟢 低
问题描述
main.rs虽然已校验output.is_none() && port == 0的组合,但在StatePortal::new被库代码或测试直接调用时,该expect会导致 panic 而非可恢复的错误。建议修复
改为
bail!以返回Result::Err,保持 API 的健壮性:修复方案
将 state_portal.rs 中两处 expect() 替换为 ok_or_else(..)? 错误传播,与函数返回类型 Result 及已有的 bail! 用法保持一致。
变更内容
1. webrtc_paused 解包(原第 167 行)
将 expect 改为 ok_or_else + ?,错误信息:internal invariant broken: webrtc_paused missing while WebRTC mode is active
2. output 解包(原第 184 行)
将 expect 改为 ok_or_else + ?,错误信息:--output is required in MP4 file output mode; use --port > 0 for WebRTC mode
验证
Commit:
d5679be