Fehler von Dritten


Thomas Wölfer
Thomas Wölfer

08. März 2012


Es gibt eine Kategorie an Fehlern die in der Baustatik auftreten und die mich ganz besonders nerven: Fehler von Dritten. Wenn ein anderes Programm irgendwas an der Windows-Installation zerstört hat, und sich dies aber bei der Arbeit mit der Baustatik äußert, dann bleibt uns im allgemeinen nichts anderes übrig, als an diesen Fehler “vorbei” zu programmieren. Das ärgerliche daran ist: So was wäre eigentlich nicht notwendig, wenn denn die “anderen” Programme einfach nur “normale” Fehler hätten – also solche, die das Programm selbst betreffen – und nicht auch noch diese Fehler weitertragen würden.

Ein typischer Fall für sowas ist eine “leicht zerstörte” Registry. Es gibt alle möglichen Hersteller von Programmen die behaupten, sie würden Windows “schneller” machen oder sonstwie "optimieren” – zum Beispiel eben auch die Registry. (Mein Rat: Hände weg von derlei Programmen.). Das Laufzeitverhalten der Registrierungsdatenbank verändert sich absolut gar nicht, egal wie viele Einträge man daraus löscht oder sonst wie verändert – aber trotzdem beharren solche “Windows Optimierer” darauf, an der Datenbank rumzufummeln. Und im blödesten Fall dabei was kaputt zu machen.

Erst gestern hatten wir mal wieder solch einen Fall: Die Baustatik spuckte schlicht und ergreifend keine “fetten” Überschriften aus – statt “Arial Bold” gab es immer nur “Arial”. Und zu diesem Problem gab es auch eine Fehlermeldung mit Telemetriedaten, und die enthielten folgende Angabe:

Eine kurze Such über alle anderen Fehlermeldungen ergab: Es gibt mindestens 2 Anwender, bei der dieses Problem auftritt. Wir machten uns also auf die Suche nach der Ursache – und die war schnell gefunden.

Beim erzeugen von PDFs müssen die im Ausdruck verwendeten Schriftarten in etwas “PDF-Kompatibles” konvertiert werden, und dazu muss zuvor ermittelt werden, wie der Name der Schriftart-Datei zur Schriftart lautet.

Dieser Name kann über einen Datensatz der Registry ermittelt werden – und genau das tut die Baustatik auch: Sie liest den Namen der benötigten Datei aus der Registry aus.

Nur: Im Falle des Fehlers enthielt die Registry nicht den Dateinamen, sondern den Dateinamen gefolgt von “Schrottzeichen”. (Wild geratene) Diagnose: Irgend ein C/C++ Programm hat hier einen Eintrag geschrieben, und zwar mit Hilfe eines String der eigentlich “Null-terminiert” sein sollte (also am Ende eine spezielle Null-Markierung haben müsste) – dies aber nicht hatte. Resultat: In der Datenbank steht ein Eintrag der zwar den benötigten Wert enthält, nur eben nicht nur den, sondern auch noch einen Rest an sonstigem Kram, der sich zufällig an einer passende Stelle befand, als das fehlerhafte Programme den Datenbankeintrag vermurkst hat.

Resultat: Wenn die Baustatik versucht die entsprechende Datei zu lesen geht es nicht, weil der Datenbankeintrag nicht nur den Namen (wie erwartet) enthält, sondern auch noch zusätzlichen Schrott.

Ab dem nächsten Update ist die Baustatik für dieses fremdverschuldete Problem nicht mehr empfänglich: wir frickeln den eigentlichen Dateinamen nur selbst aus dem Text heraus, sofern der Text neben dem Namen auch noch Unsinn enthält.

Schöner wäre es natürlich, wenn das gar nicht notwendig wäre.