BBDown v1.6.9
修复(发布前回归审查)
- mp4box 字幕参数分裂:字幕
:name=内嵌含空格语言名(如 "Aymar aru")时,在 Unix 上被 .NET 拆成两个 argv 导致混流失败。改为把名称/语言代码放在外层引号内(EscapeString 后保持单 token)。 - mp4box 音频 lang 引号结构:音频轨
:lang=的不平衡内层引号在 Windows CRT 下会破坏含引号的 lang 值,改为去掉内层引号、值留在外层引号内。 - 直播录制失败退出码:重连耗尽抛出的 HTTP 超时 OCE 不再被
LiveCommand误判为"用户取消"返回 0,改为落到失败分支返回 1(catch加when (cancellationToken.IsCancellationRequested))。 - serve host 白名单斜杠绕过:
IsOfficialHost不再对含路径/斜杠/用户信息/非默认端口的串做纯后缀匹配(此前evil.com/.bilibili.com可被放行,使携带 SESSDATA 的请求发往攻击者主机),改为只接受规范化的纯主机名。 - serve host 空值回落:
host/epHost/tvHost为空或显式 null 时不再原样保留(否则番剧/TV/intl URL 拼成https:///...抛UriFormatException),统一回落官方默认。 - serve 回调 RFC1918 内网封堵:域名解析出的 RFC1918/ULA/CGNAT 地址一律拒绝(DNS 重绑定打内网);字面 IP 的内网地址仍放行(局域网回调用法)。
- serve 密钥注入封堵:
/add-task请求体的drmKeyHex/drmKidHex字段被忽略(此前可控制 mp4decrypt 的 key-file 内容)。 - 免二压取最高画质回归:
Parser重请求接管守卫不再要求新响应同时含video+audio数组(杜比/FLAC-only 片源会被整体降级到低画质),只要求video存在即接管,音轨缺失时从新 dash 的 dolby/flac 节点补出。 - TV 登录凭据文件权限:
BBDownTV.data与BBDown.data一致,创建时即以 600 权限打开,消除 umask 两步窗口。
安全
- serve 混流命令注入:
BBDownMuxer混流时对lang/author/音轨/字幕语言等外部来源值统一转义并加引号,消除通过/add-task请求体language字段远程注入 ffmpeg/mp4box 命令行、实现宿主任意文件读写的漏洞。 - serve 强制 TLS 校验:
/add-task请求体中的insecure字段不再被接受,serve 下无法再关闭证书校验(此前可借此让携带操作者 SESSDATA 的请求被中间人截获)。 - serve 路径穿越封堵:
filePattern/multiFilePattern请求字段被忽略(可作为保存路径模板做任意目录创建/文件写入),任务一律使用默认保存模板。 - 回调 DNS 重绑定加固:任务完成回调在建立连接前会再次校验回调地址(
IsSafeCallbackUrl),把 add 时校验与连接时刻之间的 DNS 重绑定窗口压缩到最小。
修复
- 直播录制超时误判:
HttpClient2 分钟超时抛出的TaskCanceledException不再被当成"用户取消"静默结束录制,而是按瞬态故障进入重连;重连等待期间取消也不再留下孤儿.part文件。 - 直播录制重连语义:主播下播(
当前未在直播)作为终结态正常结束并改名为最终文件,不再被当可恢复故障重试 3 次后抛错;WAF/风控返回非 JSON 的JsonException也纳入重连。 - ProgressBar 计时器竞态:
Dispose与speedTimer回调改用同一把锁同步,消除对已释放Timer调用Change()导致的进程崩溃(serve 长驻场景)。 - 订阅文件丢失更新:
SubscriptionStore的读-改-写完整序列纳入_ioLock,并发写者不再互相覆盖。 - 批量下载超时中止:单个分P 的 HTTP 超时(
TaskCanceledException)不再让整批下载中止,进入"记录失败后继续"分支;封面下载不再吞掉用户取消信号。 - 空收藏夹误导报错:无
-p时选中分P为空(空收藏夹等)改为抛可读的InvalidOperationException,而非ArgumentNullException。 - Parser 免二压丢音轨:重请求响应带
dash但缺audio/video数组时沿用第一轮完整轨道,不再静默丢弃。 - 直播录制退出码:重连耗尽保留
.part并抛错,live命令退出码为 1(此前对超时误判为取消会返回 0)。
测试
- 新增
DownloadTaskSnapshotTests.AddSavePath_IsVisibleToSnapshot;ServeApiSecurityTests断言SanitizeUntrustedOptions清空insecure/filePattern/multiFilePattern;WidevineCdmTests非法 PSSH 用例先验证 wvd 可加载,防止静默退化为 Load 失败路径。 - CI 两个 workflow 的
dotnet test增加--filter "Category!=Integration",与UrlResolverTests的[Trait]对齐,避免每次 push/tag 触发真实网络请求阻塞发布。
维护
BBDownConfigParser的 URL 形态正则补充cheese/斜杠形式,配置合并不再把裸cheese/ep123误判。SensitiveDataMasker补充x-bili-exps-bin设备标识头脱敏。- 登录凭据文件(
BBDown.data)创建时即按 600 权限打开,消除 umask 权限窗口。 API.md/README.md更新 serve 安全边界说明与直播.part行为。
Commits
- chore(release): bump version to 1.6.9
- fix(review4): resolve 9 regression defects from pre-release review
- fix(review3): resolve 20 confirmed defects from 27-agent parallel review
- fix(review2): resolve 9 defects from second review pass
- fix(review): resolve 11 defects found by /code-review on new features
- feat: add live recording, subscriptions, comments, articles, watchlater and notify
- fix(audit): resolve 29 confirmed defects from parallel code review
Downloads
| Platform | Architecture |
|---|---|
| Windows | x64, arm64 |
| Linux | x64, arm64 |
| macOS | x64, arm64 |
Full Changelog: v1.6.8...v1.6.9