Skip to content

v2.4.5

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 14:33

本版本为全面代码审查后的系统性修复:36 项确认问题全部处理,涵盖崩溃修复、功能正确性、HTTP 协议合规、资源泄漏与安全加固。

🛡️ 全局异常兜底

此前整个应用没有任何未处理异常兜底——任何 UI 线程异常直接弹 .NET 崩溃对话框并终止进程,后台线程异常更是让进程无声消失。现在:

  • My.UnhandledException:异常写入日志后不退出,用户有机会保存状态
  • AppDomain.UnhandledException:后台线程异常至少留下日志线索

🐛 修复:列表刷新闪退(高频崩溃源)

下载状态/百分比/预估时间/进度文本 4 个 AspectGetter 的 Catch 块会弹英文堆栈再 Throw——而 AspectGetter 在每一行重绘时执行,一行弹一次窗,关掉后崩溃。改为只记日志并返回安全占位值。

🐛 修复:其余用户可见错误

症状 根因与修复
打开 ELC 点"取消"报 "The path is not valid" 取消时仍以空串调用 AddDLC;现在静默退出
单文件点 Reset 很快又变回 Error Fichero 分支漏调 ResetearDescarga(),残留 .part 与错误状态;补齐与包分支一致
首次运行强制配置可被"取消"绕过 密码框被填占位符 ***** 恒非空,校验永不可达;占位符现视为"未设置"
Web 超时保存 61-99 重开变空再被改 5 载入边界 >60 与保存边界 0-99 不一致;统一为 0-99
队列文件损坏导致启动即崩 CDate(strFecha) 区域性相关且无 Try;改 Date.TryParse 双文化解析,坏值跳过
后台弹窗藏到主窗体后面像卡死 DoWork 线程直接 MessageBox.Show;改走 SafeShowError 编组回 UI
VLC 启动失败无任何反馈 返回值被忽略且无 Try;两处调用方现检查返回值
拖入非 ELC/DLC 文件被静默丢弃 现在给出提示
未选中条目点"打开目录"报空路径错误 空路径直接退出

🐛 修复:功能正确性缺陷

位置 修复
DescompresorController.vb 缺分卷 RAR 假成功:IsComplete=False 时静默跳过且不置异常,上游报"解压成功";现显式抛错。重复 Code 卡"正在解压":静默跳过仍返回 True;现更新既有队列条目
FileDownloader.vb UI 冻结最长 16.5 秒:分块失败退避的 Thread.Sleep 忙等跑在 UI 线程;移到线程池。"Must specify size" 掩盖真实错误:Size=0 时跳过收尾块。Dispose 从不释放 Mutex/MutexFile/trigger:现确定性释放
Configuracion.vb Web 密码解密失败的空 Catch:保留密文当密码导致登录永远失败且无线索;现记日志并清空
Conexion.vb FileID 未转义直接拼 JSON/URL;补 JSON 转义 + UrlEncode
Main.vb 删除"包+子文件"时 CancellationComplete 双挂导致 Dispose 执行两遍;已被移除的对象直接跳过

🌐 HTTP 模块:Range 合规 + CSRF + 限速

  • RFC 7233:支持 bytes=-N 后缀区间与 bytes=N- 开放区间;越界返回 416 + bytes */size(此前静默钳位);bytes=0-0 单字节探测只取一个对齐块(此前向 MEGA 请求整个文件,带宽放大);尾块截断到 Content-Length(响应体不再超发)
  • ?mega= 解析:直接用框架解析的参数值,?p=密码&mega=... 顺序不再失败
  • 流媒体库 CSRF:Delete/Save/OpenVLC/ImportLinks/ExportLinks 现要求 POST + 有效 token(复用 Web 界面的 EnsureCsrf 模式);顺带修复浏览页 OpenVLC 用 GET 调 POST-only 接口的既有失效
  • 登录限速:PBKDF2(100k) 在请求线程同步执行,POST 轰炸可打满线程池;现并发上限 4 + 60 秒窗口失败锁定 10 次

💾 资源泄漏

  • Criptografia.decrypt_key:循环内 CreateDecryptor 从不 Dispose;改 Using
  • MD5Utils.MD5CalcString:补 Using
  • DescompresorController ×4 处、ThrottledStreamController ×1 处 Mutex 补 Try/Finally
  • Configuration/PropiedadesDescarga 共 5 处悬停 ToolTip 泄漏;复用单实例

🔒 Stegano(隐写)

  • 先写坏再报错:容量校验发生在写盘之后,留下截断的 .jpg;改为内存编码+校验全通过才落盘
  • OpenWrite 不清空尾部:覆盖更长的旧文件时新旧字节拼接;WriteAllBytes 截断覆盖
  • Uri 校验形同虚设:RelativeOrAbsolute 对 "hello world" 返回 True;限定 Absolute + http/https/file

🧹 维护性清理

  • vbproj 删除死引用 TODO\TODO.txtplantilla botones.psd;删除孤儿文件 postbuildevent.xml
  • DPI 配置统一 PerMonitorV2;移除未部署的 Unsafe 程序集重定向
  • 硬编码英文消息(10 处)接入语言系统,新增 en-US/zh-CN 条目

Full Changelog: v2.4.4...v2.4.5