Sdílet prostřednictvím


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
}