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
}