Upozornění C26459
Volali jste funkci STL %function% s nezpracovaným parametrem ukazatele na pozici %position%, která může být nebezpečná – to spoléhá na volajícího, aby zkontroloval správnost předávaných hodnot. Zvažte zabalení rozsahu do gsl::span a předejte jako iterátor rozpětí (stl.1).
Poznámky
Mimo vázané zápisy jsou jednou z hlavních příčin ohrožení zabezpečení vzdáleného spuštění kódu. Jedním z nápravných opatření je použití vázaných kontrolovaných datových struktur, jako je gsl::span
. Toto upozornění identifikuje případy, kdy algoritmy STL (Standard Template Library) pracují s nezpracovaným ukazateli jako výstupními oblastmi. Nezpracované ukazatele nejsou zaškrtnuté. Pokud chcete zabránit ohrožením zabezpečení, použijte gsl::span
místo toho.
Název analýzy kódu: NO_RAW_POINTER_IN_STL_RANGE_CHECKED
Příklad
Následující kód ukazuje nedefinované chování, protože neexistuje žádná kontrola hranic a copy_if
zápisy nad rámec poskytnutého úložiště.
void f()
{
std::vector<int> myints = { 10, 20, 30, 40, 50, 60, 70 };
int mydestinationArr[7] = { 10, 20, 80 };
std::copy_if(myints.begin(), myints.end(), mydestinationArr, [](int i) { return !(i<0); }); // Warning: C26459
}
Pokud chcete upozornění opravit, ujistěte gsl::span
se, že je oblast výstupu zaškrtnutá:
void f()
{
std::vector<int> myints = { 10, 20, 30, 40, 50, 60, 70 };
int mydestinationArr[7] = { 10, 20, 80 };
gsl::span<int> mySpan{mydestinationArr};
std::copy_if(myints.begin(), myints.end(), mySpan.begin(), [](int i) { return !(i<0); }); // No warning
}