Eine Sicherheitslücke, die durch Ändern des Codes eintritt, gibt es wohl immer. Das kann ich auch haben, wenn ich snprintf benutze:
"Du musst nur den zweiten Parameter größer machen als die Größe deines Puffers, ..."
oder
"Du musst nur mehr Formatstringfelder angeben als zusätzliche Parameter, ..."
Das ist für mich kein Argument, und wenn es für dich eins sein sollte, dürfte snprintf auch nicht besser sein.
Ich möchte ein anderes Beispiel bringen:
Verwendest du grundsätzlich std::vector::at, auch an den Stellen im Code, an denen std::vector::operator[] mit Sicherheit ausreichen würde, weil keine Bereichsüberschreitung auftreten kann?
Vorschlag: Ich füge dem FAQ-Beispiel den Hinweis hinzu, dass man auf Pufferüberläufe achten muss, wenn man die Länge des fertigen Strings nicht mit Sicherheit abschätzen kann, und verweise auf snprintf.
Entschuldige bitte meine Zweifel, aber kannst du mich auf ein Kapitel verweisen? Ich finde das gerade nicht.