Gibt es any
Art und Weise kann ich eine Größenbeschränkung auf einen Zeichenpuffer auferlegen, so dass keine Art von Operation auf dem Puffer zu einem Out-of-Bounds-Zugriff führen würde?auferlegen Einschränkungen für die Puffergröße
Antwort
Kurz gesagt: Nein
C führt keine Laufzeitprüfungen, wenn Sie sie von Hand tun.
Sie können Ihre eigenen Funktionen, Makros und pro-Puffer-Buchführung verwenden, um vor ungültigen Zugriffen zu schützen. Allerdings müssten Sie diese Schnittstelle überall verwenden, was bedeutet, dass Sie den direkten Zugriff auf diesen Puffer verlieren würden.
Sie würden aufgrund der zusätzlichen Zustandsprüfungen auch Auswirkungen auf die Leistung haben. Sie können dies möglicherweise vermeiden, indem Sie direkten Zugriff auf Codezweige verwenden, die nachweislich keine Out-of-Bounds-Zugriffe verursachen.
EDIT:
Es gibt auch die eher große Frage „Was sollte der Code tun, wenn ein ungültiger Zugriff erkannt wird“. Sollte Ihr Programm einen Fehler ausgeben und beenden, als ob es eine Ausnahme in anderen Sprachen gegeben hätte? Sollte es den Fehler ignorieren? Sollte es versuchen, es zu beheben?
Der C-Weg, um mit diesem Problem umzugehen, ist Look-Before-You-Jump und sicherstellen, dass jeder Code-Zweig/Teil im Voraus sicher ist, anstatt jeden Zugriff zu überprüfen.
Dies kann helfen: http://duma.sourceforge.net/ in Ihrer Suche.
Die kurze Antwort: Nein
Die lange Antwort:
Um sicherzustellen, sogar etwas so dumm, wie buffer[ULLONG_MAX]
nicht außerhalb der Grenzen geht, müssen Sie Ihren Puffer mit einem gebunden erklären, größer als die größten ganzen Zahl darstellbar auf dem System. Dies ist natürlich nicht möglich, abgesehen von der Menge an Speicher, die ein solcher Puffer benötigen würde.
Die praktische Lösung ist, dass Sie manuell die Größe Ihres Puffers verfolgen und jede nicht vertrauenswürdige Indexierung in den Puffer gegen die Puffergröße verifiziert wird.
Sehen Sie unsere Memory Safety Checker, die als Debugging-Hilfe verwendet wird, instrumentiert Ihren C-Code, um festzustellen, ob Sie Fehler mit Arrays oder Puffern machen. Das findet Probleme, die Valgrind nicht kann.
- 1. Welche Einschränkungen wird die LGPL meinem Code auferlegen?
- 2. Puffergröße für AVPlayer/AVPlayerItem
- 3. Puffergröße geändert
- 4. Berechnen der erforderlichen Puffergröße für die WriteableBitmap.WritePixels-Methode
- 5. So ermitteln Sie die Puffergröße für vswprintf unter Linux gcc
- 6. Optimale Puffergröße für JSPs und Autoflush-Eigenschaft
- 7. Optimale Puffergröße für Lese-Prozess-Schreiben
- 8. Einstellung der kleineren Puffergröße für sys.stdin?
- 9. Optimale Puffergröße für den Antwortstream von HttpWebResponse
- 10. Was ist die Puffergröße im Socket?
- 11. Sellerie rate_limit das Limit nicht auferlegen
- 12. Alle Einschränkungen für die Entwicklung in Vista
- 13. Sind eindeutige Einschränkungen für die DB notwendig?
- 14. Einschränkungen für die SMTP-Nachrichten-ID?
- 15. Einschränkungen für benutzerdefinierte Cursor, die CreateIconIndirect verwenden?
- 16. Beste Datenstruktur für die folgenden Einschränkungen?
- 17. Wie groß ist die Puffergröße in BufferedReader?
- 18. AudioQueue Trimmen und Puffergröße
- 19. zlib Ausgabespeicher Puffergröße Fehler
- 20. UdpClient - begrenzte Puffergröße?
- 21. Einschränkungen für Firebase-Benachrichtigungsthemen
- 22. Einschränkungen für Shader
- 23. Einschränkungen für geschlossene Familien?
- 24. Einschränkungen für Tabellennamen
- 25. "Einschränkungen für explizite Schnittstellenimplementierung ..."
- 26. BufferedReader Standard-Puffergröße?
- 27. telnetlib read_until Puffergröße
- 28. UIStoryboard Einschränkungen für UIView
- 29. UDT Server Puffergröße?
- 30. Einschränkungen für eine Protokollversand-Datenbank