dotnet/runtime

Null checks in incorrect order in Cordb::Terminate

Open

#47,463 创建于 2021年1月26日

在 GitHub 查看
 (5 评论) (0 反应) (0 负责人)C# (5,445 fork)batch import
area-Diagnostics-coreclrhelp wanted

仓库指标

Star
 (17,886 star)
PR 合并指标
 (平均合并 12天 11小时) (30 天内合并 661 个 PR)

描述

There's a null-check for m_rcEventThread in Cordb::Terminate here:

https://github.com/dotnet/runtime/blob/3f12b16fa6db2b2ca5c9016ed9540547a3e752d5/src/coreclr/debug/di/rsmain.cpp#L1125

But the variable is already used without null-testing a littler earlier in the same method:

https://github.com/dotnet/runtime/blob/3f12b16fa6db2b2ca5c9016ed9540547a3e752d5/src/coreclr/debug/di/rsmain.cpp#L1079

If the variable was actually null, dereferencing it leads to undefined behaviour, so a compiler is free to assume that wont happen. A recent compiler might therefore remove the null check on line 1125 entirely. We should probably null-check m_rcEventThread everywhere, or remove the null-checks.

贡献者指南