In seiner CodeSOD-Kolumne erzählt Remy Porter von einer Fehlersuche der Entwicklerin Greta, die mit einer alten Pascal-Entwicklungsumgebung arbeitet. Ihr Programm meldete ständig, Dateien existierten nicht, obwohl sie eindeutig vorhanden waren. Die Spur führte in die Standardbibliothek von Borlands Delphi- und Kylix-Laufzeitumgebung, ursprünglich mit Copyright-Vermerk 1995 bis 2001.

Die Funktion FileExists prüft die Existenz einer Datei nicht direkt. Sie ruft stattdessen FileAge auf, das über die Windows-API-Funktion FindFirstFile die Datei sucht und anschließend mit FileTimeToDosDateTime den letzten Schreibzeitpunkt in ein DOS-Datums- und Zeitformat umwandelt. Gelingt die Umwandlung, liefert FileAge den kodierten Zeitstempel zurück. Schlägt irgendein Schritt fehl, gibt FileAge -1 zurück, und FileExists wertet -1 dann als Zeichen, dass die Datei fehlt.

Der eigentliche Fehler: FileTimeToDosDateTime liefert einen booleschen Erfolgswert und setzt bei Misserfolg einen Windows-Fehlercode, doch der Delphi-Bibliothekscode prüft weder das eine noch das andere. Ein Prozess auf Gretas System schrieb Dateien, ohne einen letzten Schreibzeitpunkt zu setzen. Ohne gültigen Zeitstempel scheiterte die Konvertierung lautlos, FileAge lieferte -1, und FileExists schloss fälschlich, die Datei existiere nicht, obwohl sie längst auf der Platte lag.