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.

貢獻者指南