dotnet/runtime

Null checks in incorrect order in Cordb::Terminate

Open

#47.463 aberto em 26 de jan. de 2021

Ver no GitHub
 (5 comments) (0 reactions) (0 assignees)C# (5.445 forks)batch import
area-Diagnostics-coreclrhelp wanted

Métricas do repositório

Stars
 (17.886 stars)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

Description

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.

Guia do colaborador