审查范围
对 GeneralUpdate.Core 全模块(Bootstrap / Pipeline / Differential / IPC / Security / Strategy / FileSystem / Hooks / Silent / GracefulExit)进行系统性代码审查。
修复状态:✅ 全部完成(17/17)
修复 PR: #516
🔴 Critical(1/1 已修复)
C1 — GetTempDirectory() 路径遍历风险 — Pipeline/DiffPipeline.cs:575
修复: 改用 StartsWith+Substring 替代 string.Replace 做路径计算。
🟠 High(4/4 已修复)
H1 — BsdiffDiffer 大文件 OOM — Pipeline/DiffPipelineOptions.cs, DiffPipeline.cs
修复: 新增 MaxInputFileSize 属性,调用 differ 前校验文件大小,超限时抛 InvalidOperationException。默认 0 表示不限制。
H2 — Process.Start 返回值未检查 — 5 个 Strategy 文件
修复: 所有 Process.Start() 均检查返回值,失败时抛异常。
H3 — UnixPermissionHooks 参数注入 — Hooks/IUpdateHooks.cs:52
修复: .NET 6+ 用 ArgumentList;netstandard2.0 保留引号包裹缓解方案。
H4 — SafeOnBeforeUpdateAsync 异常时行为错误 — Strategy/ClientStrategy.cs:1015-1026
修复: 异常时返回 false(中止更新)而非 true(放行更新)。
🟡 Medium(7/7 已修复)
M2 — HttpClientProvider 无限超时 — Network/HttpClientProvider.cs:41
修复: 设置 5 分钟安全网上限,替代 InfiniteTimeSpan。
M3 — StorageManager 目录跳过使用子串匹配 — FileSystem/StorageManager.cs
修复: GetAllFiles 和 CopyDirectory 中的 Contains 改为 StartsWith 前缀匹配。
M4 — DateTime.Now 替换 — FileSystem/StorageManager.cs
修复: GetTempDirectory 和 GetBackupDirectoryName 均改为 DateTime.UtcNow。
M6 — SilentPollOrchestrator 后台异常静默 — Silent/SilentPollOrchestrator.cs:84-88,132-137
修复: 轮询异常和后台线程异常通过 EventManager 分发 ExceptionEventArgs。
M7 — DefaultDirtyMatcher 缺少 null 校验 — Differential/DefaultDirtyMatcher.cs:34
修复: 添加 ArgumentNullException 守卫。
M8 — GracefulExit 无窗口进程文档 — GracefulExit.cs
修复: 补充 CloseMainWindow() 对无窗口进程行为的 XML doc。
🟢 Low(5/5 已修复)
| # |
文件 |
问题 |
修复 |
| L1 |
DiffPipeline.cs:530-533 |
CopyUnknownFiles fallback 使用完整绝对路径 |
✅ 改为 skip |
| L2 |
AbstractStrategy.cs:147 |
patchRoot 异常时未清理 |
✅ 移至 finally |
| L4 |
Environments.cs:39 |
IPC key 无字符校验,可路径遍历 |
✅ 白名单校验 |
| L5 |
IProcessInfoProvider.cs:82-83 |
冗余 File.Delete |
✅ 移除 |
| L7 |
Bootstrap.cs:580 |
CallSmallBowlHomeAsync 空名静默 |
✅ 记录警告 |
验证
- ✅ 三框架编译通过(netstandard2.0 / net8.0 / net10.0),0 错误 0 新警告
- ✅ 16 文件修改,+207 / −33 行
- ✅ 所有修复不改变现有公开 API 行为
结论
GeneralUpdate.Core 代码审查中发现的全部安全隐患和质量缺陷(17/17)均已通过 PR #516 修复。可以正常使用。
审查范围
对 GeneralUpdate.Core 全模块(Bootstrap / Pipeline / Differential / IPC / Security / Strategy / FileSystem / Hooks / Silent / GracefulExit)进行系统性代码审查。
修复状态:✅ 全部完成(17/17)
修复 PR: #516
🔴 Critical(1/1 已修复)
C1 — GetTempDirectory() 路径遍历风险 —
Pipeline/DiffPipeline.cs:575修复: 改用
StartsWith+Substring替代string.Replace做路径计算。🟠 High(4/4 已修复)
H1 — BsdiffDiffer 大文件 OOM —
Pipeline/DiffPipelineOptions.cs,DiffPipeline.cs修复: 新增
MaxInputFileSize属性,调用 differ 前校验文件大小,超限时抛InvalidOperationException。默认 0 表示不限制。H2 — Process.Start 返回值未检查 — 5 个 Strategy 文件
修复: 所有
Process.Start()均检查返回值,失败时抛异常。H3 — UnixPermissionHooks 参数注入 —
Hooks/IUpdateHooks.cs:52修复: .NET 6+ 用
ArgumentList;netstandard2.0 保留引号包裹缓解方案。H4 — SafeOnBeforeUpdateAsync 异常时行为错误 —
Strategy/ClientStrategy.cs:1015-1026修复: 异常时返回
false(中止更新)而非true(放行更新)。🟡 Medium(7/7 已修复)
M2 — HttpClientProvider 无限超时 —
Network/HttpClientProvider.cs:41修复: 设置 5 分钟安全网上限,替代
InfiniteTimeSpan。M3 — StorageManager 目录跳过使用子串匹配 —
FileSystem/StorageManager.cs修复:
GetAllFiles和CopyDirectory中的Contains改为StartsWith前缀匹配。M4 — DateTime.Now 替换 —
FileSystem/StorageManager.cs修复:
GetTempDirectory和GetBackupDirectoryName均改为DateTime.UtcNow。M6 — SilentPollOrchestrator 后台异常静默 —
Silent/SilentPollOrchestrator.cs:84-88,132-137修复: 轮询异常和后台线程异常通过
EventManager分发ExceptionEventArgs。M7 — DefaultDirtyMatcher 缺少 null 校验 —
Differential/DefaultDirtyMatcher.cs:34修复: 添加
ArgumentNullException守卫。M8 — GracefulExit 无窗口进程文档 —
GracefulExit.cs修复: 补充
CloseMainWindow()对无窗口进程行为的 XML doc。🟢 Low(5/5 已修复)
DiffPipeline.cs:530-533AbstractStrategy.cs:147Environments.cs:39IProcessInfoProvider.cs:82-83Bootstrap.cs:580验证
结论
GeneralUpdate.Core 代码审查中发现的全部安全隐患和质量缺陷(17/17)均已通过 PR #516 修复。可以正常使用。