ich eine Menge von String-Funktionen wie Strncpy mit, strncat, sprintf usw. in meinem Code. Ich weiß, dass es bessere Alternativen zu diesen gibt, aber ich wurde ein altes Projekt übergeben, wo diese Funktionen verwendet wurden, also muss ich bei ihnen bleiben für Kompatibilität und Konsistenz. Mein Supervisor ist sehr pingelig in Bezug auf Fehlerprüfung und Robustheit und besteht darauf, dass ich jedes Mal, wenn ich diese Funktionen nutze, nach Pufferüberlaufverletzungen suche. Dies hat eine Menge von if-else-Anweisungen in meinem Code erzeugt, die nicht hübsch aussehen. Meine Frage ist, ist es wirklich notwendig, jedes Mal, wenn ich eine dieser Funktionen anrufe, nach einem Überlauf zu suchen? Selbst wenn ich weiß, dass ein Pufferüberlauf möglicherweise nicht auftreten kann, z. wenn eine ganze Zahl in einem String-Speicherung mit der Funktion sprintfString Fehlerprüfung
sprintf(buf,"%d",someInteger);
Ich weiß, dass die maximale Länge eines unsigned integer auf einem 64-Bit-System 20 Ziffern lang sein kann. buf auf der anderen Seite ist weit über 20 Zeichen lang. Soll ich in diesem Fall noch auf Pufferüberlauf prüfen?
Vielleicht bekomme ich die Frage nicht, aber haben Sie darüber nachgedacht, 'snprintf'-ähnliche Funktionen zu verwenden? Sie können die Pufferüberlaufprüfung für Sie durchführen. –
Selbst mit 'snprintf' würde ich immer noch überprüfen müssen, ob die Quellzeichenfolge größer als das Ziel ist, und mit einem Fehlercode zurückkehren, wenn das wahr ist. – wahab
Meiner Meinung nach können Sie wegkommen, ohne in dieser Situation nach einem Überlauf zu suchen. Ganzzahlige Überläufe sind nur dann der Fall, wenn Sie diese Ganzzahl für die Speicherzuweisung und die Offset-Ermittlung verwenden. Aber ich bin kein Experte auf diesem Gebiet! – puelo