Ich habe ein altes Projekt, das C und C++ gemischt ist. Es macht ausgiebigen Gebrauch von C-Saiten und von strcpy
,strcat
,strncpy
,strncat
usw. Ich habe eine Reihe von Pufferüberläufen entdeckt und möchte sicherere Funktionen verwenden, z strcpy_s
. MSVC enthält diese Funktionen, aber ich brauche etwas, das auf verschiedenen Plattformen funktioniert – zumindest Linux, OSX und Windows.
Ich weiß von strlcpy
aber wie viele Leute bemerkt haben (Beispiel), es ist wirklich keine Verbesserung.
Also: Gibt es freie Implementierungen von strcpy_s
, strcat_s
etc, oder des gesamten TR24731-1
?
Ich brauche etwas, das beides ist public domain
oder BSD
aber wenn Sie Implementierungen unter anderen Lizenzen kennen, fahren Sie fort und listen Sie sie auf – ich bin sicher, jemand anderes wird davon profitieren.
Ist der
MIT
Lizenz ok? Es ist im Grunde BSD-3 ohne den dritten Satz, wenn ich mich nicht irre.– Joey Adams
9. April 2012 um 0:45 Uhr
Ja, MIT ist in Ordnung. Ich habe vergessen, es zu erwähnen. Danke
:)
– Markieren
9. April 2012 um 0:53 Uhr
Sie könnten an einer Verwendung interessiert sein
mudflap
auf Linux. Aus der Dokumentation: “So instrumentierte Module sollten immun gegen Pufferüberläufe, ungültige Heap-Nutzung und einige andere Klassen von C/C++-Programmierfehlern sein.” Es wird aktiviert durch-fmudflap
auf GCC erfordert die Installation dermudflap
Bibliothek, sollte aber wahrscheinlich für die C++-Teile vermieden werden.– Dietrich Ep
9. April 2012 um 1:09 Uhr
Alternativ können Sie, um eine separate Bibliothek zu vermeiden, die (Standard ab C99)
snprintf
um die Aufgabe korrekt/sicher auszuführen (wenn möglich etwas langsamer aufgrund der Verarbeitung von Formatzeichenfolgen). Ein schlechterstrncpy(dst, src, dstlen)
direkt in ein Gut umwandeln kannsnprintf(dst, dstlen, "%s", src);
; Es gibt sogar die Anzahl der geschriebenen Zeichen zurück, sodass Sie auf Trunkierung testen können (wenn der Rückgabewert>= dstlen
die Ausgabe wurde abgeschnitten).– ShadowRanger
21. Juni 2018 um 16:09 Uhr