Skip to content

BBDown v1.6.9

Choose a tag to compare

@github-actions github-actions released this 03 Aug 18:28
· 105 commits to master since this release

修复(发布前回归审查)

  • mp4box 字幕参数分裂:字幕 :name= 内嵌含空格语言名(如 "Aymar aru")时,在 Unix 上被 .NET 拆成两个 argv 导致混流失败。改为把名称/语言代码放在外层引号内(EscapeString 后保持单 token)。
  • mp4box 音频 lang 引号结构:音频轨 :lang= 的不平衡内层引号在 Windows CRT 下会破坏含引号的 lang 值,改为去掉内层引号、值留在外层引号内。
  • 直播录制失败退出码:重连耗尽抛出的 HTTP 超时 OCE 不再被 LiveCommand 误判为"用户取消"返回 0,改为落到失败分支返回 1(catchwhen (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.dataBBDown.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 重绑定窗口压缩到最小。

修复

  • 直播录制超时误判HttpClient 2 分钟超时抛出的 TaskCanceledException 不再被当成"用户取消"静默结束录制,而是按瞬态故障进入重连;重连等待期间取消也不再留下孤儿 .part 文件。
  • 直播录制重连语义:主播下播(当前未在直播)作为终结态正常结束并改名为最终文件,不再被当可恢复故障重试 3 次后抛错;WAF/风控返回非 JSON 的 JsonException 也纳入重连。
  • ProgressBar 计时器竞态DisposespeedTimer 回调改用同一把锁同步,消除对已释放 Timer 调用 Change() 导致的进程崩溃(serve 长驻场景)。
  • 订阅文件丢失更新SubscriptionStore 的读-改-写完整序列纳入 _ioLock,并发写者不再互相覆盖。
  • 批量下载超时中止:单个分P 的 HTTP 超时(TaskCanceledException)不再让整批下载中止,进入"记录失败后继续"分支;封面下载不再吞掉用户取消信号。
  • 空收藏夹误导报错:无 -p 时选中分P为空(空收藏夹等)改为抛可读的 InvalidOperationException,而非 ArgumentNullException
  • Parser 免二压丢音轨:重请求响应带 dash 但缺 audio/video 数组时沿用第一轮完整轨道,不再静默丢弃。
  • 直播录制退出码:重连耗尽保留 .part 并抛错,live 命令退出码为 1(此前对超时误判为取消会返回 0)。

测试

  • 新增 DownloadTaskSnapshotTests.AddSavePath_IsVisibleToSnapshotServeApiSecurityTests 断言 SanitizeUntrustedOptions 清空 insecure/filePattern/multiFilePatternWidevineCdmTests 非法 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