Das Curl-Projekt hat die Verwendung der Funktion strcpy im Code abgeschafft.

Daniel Stenberg, der Autor des Tools zum Abrufen und Senden von Daten über das Netzwerk curl, hat die Verwendung der Funktion strcpy() im Code des Projekts eingestellt und deren Nutzung in Zukunft verboten. Diese Entscheidung ist eine Fortsetzung der im letzten Jahr eingeleiteten Ablehnung der Funktion strncpy(), die eine bestimmte Anzahl von Bytes aus einer Eingabestring kopiert. Die Verwendung von strncpy() stellte ein Risiko dar, Fehler zu erzeugen, da das Nullzeichen am Ende der Zeichenfolge übersprungen oder mit Nullen aufgefüllt werden konnte.

Aufrufe von strncpy() wurden durch die Funktion strcpy() ersetzt, wobei vor dem Aufruf eine Speicherzuweisung für den Zielpuffer unter Berücksichtigung der Größe der Eingabestring erfolgt oder überprüft wurde, ob die Größe der Eingabestring und des Zielpuffers übereinstimmt. Der Austausch gegen die Funktion strlcpy() wurde nicht vorgenommen, da immer die gesamte Zeichenfolge kopiert oder ein Fehler zurückgegeben werden sollte.

Nun wurden alle Aufrufe von strcpy() durch die neue Funktion curlx_strcopy(dest, dsize, src, slen) ersetzt. Die Funktion curlx_strcopy() erfordert die Angabe der Größe des Eingabe- und Zielpuffers, wobei berücksichtigt werden muss, dass der Zielpuffer größer als die Eingabe sein muss, um das Nullzeichen am Ende der Zeichenfolge, das von der Funktion zum Ausschluss des Überspringens beim Kopieren gezwungenermaßen hinzugefügt wird, unterzubringen. Wenn die Größe des Zielpuffers größer als Null ist, aber nicht ausreicht, um die Zielzeichenfolge zu kopieren, wird ein Null-Byte am Anfang hinzugefügt. void curlx_strcopy(char *dest, size_t dsize, const char *src, size_t slen) { DEBUGASSERT(slen < dsize); if(slen < dsize) { memcpy(dest, src, slen); dest[slen] = 0; } else if(dsize) dest[0] = 0; }

Der Austausch von strcpy() gegen curlx_strcopy() wurde vorgenommen, da die Möglichkeit menschlicher Fehler besteht, die zu einer Trennung des Codes mit Überprüfung/Speicherzuweisung und dem Aufruf von strcpy() führen können, zum Beispiel bei unüberlegtem Verschieben nur eines Teils des Codes oder Einfügen von Code zwischen der Überprüfung und dem Aufruf von strcpy(). Darüber hinaus wird das Beenden der Verwendung von strcpy es ermöglichen, falsche Meldungen über Schwachstellen zu beseitigen, die durch fehlerhafte Auslösungen von KI-Tools erzeugt werden, die das Vorhandensein von strcpy() als Schwachstelle betrachten, ohne die im Code vorhandenen Prüfungen zu berücksichtigen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4