012
22.05.2012, 09:28 Uhr
ao
(Operator)
|
Zitat von banshee: |
Und genau deshalb wäre es doch sinnvoll, das übergebene Argument kurz zu checken. Es ist ja nicht so, dass man dem Anwender unbedingt Absicht unterstellen müsste (obwohl ein Angreifer das potentiell ausnutzen könnte, um eben private Speicherbereiche auszulesen), aber wenn man in einem Riesenprojekt aus Versehen einen falschen Index angibt, dann -98328753 zurück kriegt, und die Anwendung in einem komplett anderen Modul crashed - viel Spaß beim debuggen
|
So pauschal würde ich nicht sagen, dass das sinnvoll ist.
Es geht hier um ein Array-Template, eine primitive Wrapper-Klasse, die in erster Linie eins sein soll: Performant. Klassen wie diese werden hundertfach in größeren Programmen verwendet, und jede kleine Verschwendung, die man hier begeht, zählt deshalb hundertfach. Da läppert sich echt was zusammen.
Die traditionelle C-Denke ist, dass jeder Programmierer verantwortlich ist für das, was er tut. Die Verantwortung einfach weiterschieben und sagen "die Bibliothek muss prüfen, was ich mache" - das gibts in diesem Modell nicht.
Für interne Funktionen, Array-Wrapper und so ein Zeugs ist das der richtige Ansatz, denn er hält Programme klein und schnell. Für Fehler während der Entwicklungsphase gibts Assertions, die beim Release-Compile rausfallen, die wären hier eine Überlegung wert. Aber grundsätzlich den Index prüfen? Nein, das wäre meiner Meinung nach mit Kanonen auf Spatzen geschossen. Weil es im fertig ausgetesteten Programm nicht mehr zu diesen Fehlern kommt (*), muss in der Release-Fassung auch keine Prüfung mehr stattfinden.
(*) vorausgesetzt, man hat sorgfältig genug analysiert und getestet, um das sagen zu können.
Für Funktionen auf API-Ebene gilt das natürlich nicht. Die müssen sich selbstverständlich gegen Aufruffehler schützen, und wenn böswillige Angriffe zu erwarten sind, dann besonders. Das muss die API-Schicht aber selbst übernehmen und kann nicht davon ausgehen, dass sie es einfach nach unten delegieren kann, und irgendwer wird ihr das schon abnehmen. |