v2.4.0 - 全面 Bug 修复
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.AgregarPaquete和bgwComprobarMaxConexiones两处 Mutex 加Try/Finally - 下载 worker 未 Dispose:
FileDownloader.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注释掉的DecryptFile和cipherData - 删除
Conexion注释的GetAppID和无调用的LeerNodo
版本号
- Assembly / FileVersion →
2.4.0.0 - InternalConfig
VERSION_MEGADOWNLOADER/VERSION_UPDATE→2.4 docs/version.xml→2.4.0.0
Full Changelog: v2.3.0...v2.4.0