[GFX-217] 消除 XxHashHelper Hash64Core 的 Sonar S6640 unsafe 违规 - #155
Conversation
XxHashHelper.InternalXxHashHelper.Hash64Core 将签名从 unsafe byte* + int length 改为 ulong Hash64Core(ReadOnlySpan<byte> input, uint seed = 0),长度由 input.Length 派生;使用 BinaryPrimitives.ReadUInt64LittleEndian / ReadUInt32LittleEndian 安全读取 8/4 字节,输入偏移以本地 offset 变量推进。同步更新 ComputeHash64(byte[]) 调用方,移除 unsafe 关键字与 fixed (byte*) 块,直接传入 buffer 隐式转为 ReadOnlySpan<byte>。算法常量/混合/最终 avalanche 与原实现完全等价,公共 Hash64(byte[]/string/Type/<T>) 签名与参数校验均不变;现有 XxHashHelperTests 63 个测试(空数组/单字节/中文/长字符串/Unicode/性能/Null 校验/重复一致性等)全部通过,整库 1807 个测试 0 失败。Linear: GFX-217
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthrough本次变更将 xxHash64 的核心输入读取改为 ChangesxxHash64 Span 读取重构
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
|
GFX-217 等价替代方案(仅供参考,不阻塞): 注意到 本 PR 的 span 重写( |
XxHashHelper.InternalXxHashHelper 的 32 位手写核心从 unsafe byte* + int length 改为 uint Hash32Core(ReadOnlySpan<byte> input, uint seed = 0),长度由 input.Length 派生;使用 BinaryPrimitives.ReadUInt32LittleEndian 安全读取 4 字节,输入偏移以本地 offset 变量推进。同步更新 ComputeHash32(byte[]) 调用方,移除 unsafe 关键字与 fixed (byte*) 块(即 Sonar line 487 的 S6640 违规点),直接传入 buffer 隐式转为 ReadOnlySpan<byte>。算法常量/16 字节块混合/尾轮/avalanche 与原实现完全等价,小端平台逐位一致;公共 ComputeHash32(string/Type/<T>) 与外层 Hash32(...) 签名/校验/返回类型不变。命名从 ComputeHash32 改为 Hash32Core,与已合并的 64 位 Hash64Core(PR #155)对齐,同时避免与 ComputeHash32(byte[]) 重载决议递归。现有 XxHashHelperTests 63 个测试全部通过,整库 1807 个测试 0 失败。Linear: GFX-219
InternalXxHashHelper 的 32 位 unsafe 指针核心 ComputeHash32(byte*,int,uint) 改写为安全 span 核心 Hash32Core(ReadOnlySpan<byte>,uint),长度由 input.Length 派生,用 BinaryPrimitives.ReadUInt32LittleEndian 安全读取 4 字节块、input[offset] 读单字节、本地 offset 推进偏移;调用方 ComputeHash32(byte[]) 移除 unsafe/fixed 改为 return Hash32Core(buffer)。核心重命名为 Hash32Core(与 64 位 Hash64Core 对称)以避免 ComputeHash32(byte[]) 的 return ComputeHash32(buffer) 被 C# 重载决议命中自身 byte[] 重载导致无限递归。算法常量/位移/混合/avalanche 与原实现逐行等价,公共 ComputeHash32(byte[]/string/Type/<T>) 签名与参数校验不变;对齐已合入的 GFX-217/#155(64 位 Hash64Core span 改写)范式。现有 XxHashHelperTests 63 个测试全通过,整库 1807 个测试 0 失败。 Linear: GFX-220



Linear: GFX-217
Summary by CodeRabbit