Warnung C26459

Sie haben eine STL-Funktion „%function%“ mit einem Rohzeigerparameter an der Position „%position%“ aufgerufen, der möglicherweise unsicher ist. Der Aufrufer muss prüfen, ob die übergebenen Werte korrekt sind. Ziehen Sie in Betracht, Ihren Bereich mit einem gsl::span-Objekt zu umschließen und einen span-Iterator zu übergeben (stl.1).

Hinweise

Ungebundene Schreibvorgänge bilden eines der höchsten Risiken für Remotecodeausführungen. Ein Möglichkeit der Behebung ist die Verwendung von Datenstrukturen wie gsl::span, die auf ihre Grenzen überprüft werden. Diese Warnung identifiziert Fälle, in denen STL-Algorithmen (Standard Template Library) mit Rohzeigern als Ausgabebereiche verwendet werden. Rohzeiger werden nicht auf Grenzen überprüft. Verwenden Sie stattdessen gsl::span, um Sicherheitsrisiken zu vermeiden.

Name der Codeanalyse: NO_RAW_POINTER_IN_STL_RANGE_CHECKED

Beispiel

Der folgende Code veranschaulicht nicht definiertes Verhalten, da keine Grenzüberprüfung erfolgt und copy_if außerhalb des bereitgestellten Speichers schreibt.

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
}

Um die Warnung zu beheben, stellen Sie mit gsl::span sicher, dass der Ausgabebereich auf seine Grenzen überprüft wird:

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
}