Repository navigation
修复测试工具链的 NuGet 和 ASN.1 依赖告警 - #67
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
本轮提交 9c65d9c6 在上一轮 NuGet 5.11.7 的基础上只新增两行:中央表指定
System.Formats.Asn1 6.0.1,章节测试的共享配置以PrivateAssets="all"引用它。这是公告列出的最低修复包版本。原有全局间接依赖固定策略未改;没有修改教材源码、测试用例、框架或 CI。审计结果。 比对 46 个项目 × 3 个框架的还原图,唯一变动是全部 69 个测试目标中的 System.Formats.Asn1 从 5.0.0 升至 6.0.1。23 个教材项目的依赖均未变化。解决方案级 NuGet 审计包含直接和间接包:CVE-2024-38095 命中数 69 → 0;NuGet.Common、NuGet.Packaging、NuGet.Protocol 均保持 5.11.7,未出现告警。
本次没有屏蔽告警。System.Net.Http、System.Text.RegularExpressions 和 System.Text.Json 的原有告警未变;上述结论仅针对本 PR 提交的 NuGet 包审计。
本地完整测试与编译诊断:VS2026 重新构建后,.NET 6 为 640/640、.NET 7 为 646/646、.NET 8 为 650/650,共 1,936 项,零失败、零跳过。按完整方法名和数据行比对 TRX,调用
CompilerAssert的 20 个现有测试方法在每个框架上各有 34 条记录通过。例如清单 3.02 仍断言 CS0165、CS8602,清单 6.54 仍断言 CS0191。清单 6.39 的 CS9035 仍按原条件仅在 .NET 7、8 检查。构建输出:本机 23 个 .NET 6 测试项目都复制了与 NuGet 6.0.1 包内容一致的 ASN.1 DLL(逐文件比对 SHA-256);.NET 7 和 .NET 8 的 46 份测试输出没有复制该包的 DLL,对应依赖清单没有为该包列出运行时资产。包审计结论不等于为系统安装的每个共享运行时作安全认证。
GitHub CI(提交
9c65d9c62290bb3e171e101c84ed20683a86bc18)SDK 8.0.428,实际运行时 6.0.36、7.0.20、8.0.34。UTF-8 检查通过:1,186 个文本文件,24 个二进制文件排除。
最新提交六项检查全部通过;五组测试均零失败、零跳过。已完成验证,供人工审查,未合并。
历史验证:e5565495(未单独修复 ASN.1 时,告警仍在)及前序提交
本次提交 e5565495 相对上一轮 5.11.6 仅修改
Directory.Packages.props中三个版本号。教材源码、测试内容、三个目标框架及 CI 均未改动;章节测试仍通过共享测试配置引用这三个包。漏洞复查:低危已消失,高危仍存在。 对 46 个项目执行包含间接依赖的 NuGet 审计,并逐项比对两版的 138 组还原结果。下表按项目与框架组合计数,同一公告不会算成 69 个不同漏洞。
.deps.json也未列出该包的运行时资产;不能据此关闭该告警。本地完整验证: VS2026 重建后,.NET 6、7、8 分别通过 640/640、646/646、650/650,共 1,936 项,0 跳过。将每条 TRX 记录与源码中调用
CompilerAssert的 20 个测试方法匹配,含数据行在每个框架均为 34/34 通过。清单 3.02 仍断言 CS0165、CS8602,清单 6.54 仍断言 CS0191;保留清单 6.39 仅在 .NET 7、8 断言 CS9035 的原有条件。新提交的 GitHub CI:六项全部通过。 按各任务日志的测试总数和通过数核对,以下五组每组均为 69 个测试程序集,1,936 项通过,0 失败,0 跳过:
Ubuntu x64、Windows x64、macOS Arm64、简体中文 zh-CN、法语 fr-FR。Ubuntu 日志也核对到了编译诊断用例的 102 条通过记录。
SDK 8.0.428,三种实际运行时为 6.0.36、7.0.20、8.0.34;区域任务实际启用了相应文化及 UI 文化。UTF-8 检查通过:1,186 个文本文件、24 个二进制文件排除。代码分析产物已校验摘要并逐份核对,46 个项目 × 3 个框架共 138 份 SARIF,0 错误、848 个警告、343 条提示。
验证完成,供人工审查;未合并。System.Formats.Asn1 高危告警仍保留,其他依赖未另行升级。
历史验证:5.11.6(仅对应 f874975)
该 PR 只在中央版本表及章节测试项目的共享配置中增加 6 行,显式指定 NuGet.Common、NuGet.Packaging、NuGet.Protocol 5.11.6(原为间接依赖 5.6.0)。教材源文件、故意出错的示例、测试用例、三个目标框架和 CI 均未改动。#64 及其他依赖更新独立暂缓。
审计结论:旧版高危/严重告警已消失,但 5.11.6 仍不宜作为漏洞已清零的版本合并。 对整个解决方案运行
dotnet list EssentialCSharp.sln package --vulnerable --include-transitive --format json,并逐项比对 46 个项目 × 3 个框架的project.assets.json。23 个教材项目的解析包版本均未变化;三个指定包在全部 69 个测试目标上均为 5.11.6。.deps.json也未为它列出运行时资产;此证据不能用于豁免其他宿主或发布方式。只显式指定上述三个 NuGet 包。NuGet.Configuration 和 NuGet.Versioning 被自动解析到 5.11.6;同一测试依赖图也随之调整了部分 System.* 包。未将中央传递固定策略全局开启,未压制审计警告。
教材编译诊断:独立枚举并实跑全部调用
CompilerAssert的 20 个现有测试方法(7 个测试项目)。含数据行的本地 TRX 在 .NET 6、7、8 上分别为 34/34 通过,0 跳过。清单 3.02 仍断言 CS0165、CS8602,清单 6.54 仍断言 CS0191。保留原有条件:清单 6.39 仅在 .NET 7、8 断言 CS9035;表中原本期望编译成功的对照行也照常执行。完整 CI — 提交
f87497519e4d8aa576df07425d3b0c175d7aeb5e(基线0ef69d5b)SDK 8.0.428;实际探测运行时 6.0.36、7.0.20、8.0.34。UTF-8 检查通过:1,186 个文本文件,排除 24 个二进制文件。
本地 Windows(VS2026)还独立跑完了整套用例:.NET 6 为 640/640、.NET 7 为 646/646、.NET 8 为 650/650,共 1,936/1,936,0 跳过。CI Windows 首轮日志中,编译诊断用例的全部 102 条执行记录均为通过。
验收:最新提交六项 GitHub 检查全部成功,五组测试各有 1,936 项通过、0 跳过的完整记录。此项验证已完成,保留告警与首轮执行记录,供人工审查,暂不合并。