Skip to content

v2.4.0 - 全面 Bug 修复

Choose a tag to compare

@a1175815821 a1175815821 released this 13 Aug 20:08
· 7 commits to main since this release

v2.4.0 - 全面 Bug 修复

基于对 v2.3.0 全项目代码的逐文件核查,修复 21 项经确切代码证据确认的 bug,涵盖用户可感知报错、死锁/资源泄漏、并发缺陷、异常吞噬、安全债务与死代码。

一、用户层面可感知的报错(4 项)

  • 后台线程弹 MessageBox 卡死下载FileDownloader.bgwDownloader_DoWork 的 Catch 块不再在线程池线程上调用 MessageBox.Show,改为通过 ReportProgress(FileDownloadFailedRaiser) 上报失败,由 UI 线程统一呈现
  • 关闭期间跨线程 MsgBox 崩溃Main.vb 三处 BackgroundWorker.DoWork 异常分支不再直接 MsgBox,新增 SafeShowError 辅助方法,检查 IsDisposed/IsHandleCreated 并通过 Invoke 切回 UI 线程
  • 7z multipart 解压崩溃DescompresorController 两处 NotImplementedException 改为 NotSupportedException 带友好消息;DescompresionFinalizada 事件扩展传递错误消息,用户可在错误状态中看到具体原因
  • 兜底完成漏做 MD5 校验/解压Fichero.ActualizarDatosDescarga 的兜底状态修正不再仅翻转状态,改为调用完整 downloader_Completed 流程(含 MD5 校验和自动解压),避免"显示完成但未校验完整性"

二、死锁与资源泄漏(4 项)

  • Mutex 无 Try/Finally 死锁Main.AgregarPaquetebgwComprobarMaxConexiones 两处 Mutex 加 Try/Finally
  • 下载 worker 未 DisposeFileDownloader.Dispose 中循环释放 listDownloaders 里的所有 worker
  • bgArranque worker 泄漏Fichero.Dispose 新增释放 bgArranque(下载启动 worker)
  • ELCForm 300ms 忙轮询:改为 AutoResetEvent 事件驱动,无任务时零 CPU 消耗

三、并发与逻辑缺陷(2 项)

  • AJAX 响应并发污染StreamingLibraryModule._RespuestaAjax 改为 AsyncLocal(Of String)
  • FlushFinalBlock 异常吞噬ServerEncoderLinkHelper.Cipher 解密路径的空 Catch 改为日志

四、异常吞噬(3 项)

  • FlushToDisk 磁盘错误被吞 → 日志
  • 服务器错误响应读取失败被吞 → 日志
  • 解压取消异常被吞 → 日志

五、安全与技术债务(5 项)

  • DPAPI entropy 硬编码:改为从程序集标识 SHA256 派生,保留 legacy entropy 解密旧数据
  • ZIP 密码硬编码 "passZIP":改用 DPAPI,解密先 DPAPI 后回退旧 AES 兼容旧队列文件
  • OptionalPassword 死字段:删除
  • RandomNumberGenerator 未释放:用 Using 包裹
  • 日志无 UTC 时间戳:改用 DateTime.UtcNow,新增 30 天日志保留清理策略

六、死代码清理(2 项)

  • 删除 Criptografia 注释掉的 DecryptFilecipherData
  • 删除 Conexion 注释的 GetAppID 和无调用的 LeerNodo

版本号

  • Assembly / FileVersion → 2.4.0.0
  • InternalConfig VERSION_MEGADOWNLOADER / VERSION_UPDATE2.4
  • docs/version.xml2.4.0.0

Full Changelog: v2.3.0...v2.4.0