Der Windows-Rechner Calc befindet sich auf Milliarden Rechnern, da er mit Windows ausgeliefert wird. Kürzlich wurde der Quellcode des Programms als Open Source auf GitHub freigegeben. Ein paar Leute haben sich den Programmcode angesehen, das Teil ist ein Alptraum. Memory Leaks, Inhalt der Zwischenablage geht an Microsoft-Server, Berechnungsfehler und mehr.
Anzeige
Aktuell geht ja eher die Geschichte, dass Microsoft eine Grafikfunktionen-Anzeige im Windows 10-Rechner integrieren will, durch die Blogs und Internetmedien. Dabei wäre es eher wichtig, den Quellcode des Rechners mal zu entrümpeln und zu bereinigen.
(Quelle: Microsoft)
Blog-Leser Adrian hat mich auf diese Fundstelle von PVS-Studio im Web aufmerksam gemacht – danke da für. Es geht um den Windows-Rechner Calc, der auf allen Windows-Systemen mit an Bord ist. Vor einigen Tagen wurde der Quellcode dieses Programms ja als OpenSource auf Github freigegeben (siehe Windows Rechner als Open Source auf GitHub freigegeben). Die Community von PVS-Studio hat sich den Code mal angesehen und erstaunliches gefunden.
Zwischenablage geht an Microsoft
Das folgende Code-Fragment im GitHub-Quellcode des Rechners hat sofort die Aufmerksamkeit der Community auf sich gezogen.
Anzeige
void TraceLogger::LogInvalidInputPasted(....) { if (!GetTraceLoggingProviderEnabled()) return; LoggingFields fields{}; fields.AddString(L"Mode", NavCategory::GetFriendlyName(mode)->Data()); fields.AddString(L"Reason", reason); fields.AddString(L"PastedExpression", pastedExpression); fields.AddString(L"ProgrammerNumberBase", GetProgrammerType(...).c_str()); fields.AddString(L"BitLengthType", GetProgrammerType(bitLengthType).c_str()); LogTelemetryEvent(EVENT_NAME_INVALID_INPUT_PASTED, fields); }
Diese Funktion protokolliert Text aus der Zwischenablage und sendet ihn anscheinend an Microsoft-Server. Dem PVS-Studio-Beitrag entnehme ich, dass der Code weitere 'verdächtige' Stellen enthält. Macht schon Laune.
Weitere Unfälle
Die Leute von PVS-Studio haben den statischen Analysator des Tools PVS-Studio verwendet, um den Quellcode des Rechners zu überprüfen. Da der Windows-Rechner nicht in Standard-C++ geschrieben ist, gab es Zweifel, ob eine statische Code-Analyse möglich sei. Aber die Analyse hat wohl (trotz einiger Fehlalarme) funktioniert. Hier eine kurze Übersicht zu gefundenen Problemen.
- Falscher Zeichenkettenvergleich (V547, Calculator LocalizationSettings.h Zeile 180): Ein Ausdruck 'm_resolvedName == L«en-US»' innerhalb einer if-Abfrage liefert immer den Wert false.
- Memory leak im Programmcode (V773, CalcViewModel StandardCalculatorViewModel.cpp Zeile 529): Im Modul existiert ein potentielles Speicherleck, denn eine Funktion wird beendet, ohne den Zeiger "temp" freizugeben.
- Schwere Ausnahme (V702, CalcManager CalcException.h Zeile 4): Klassen sollten immer von std::exception (und ähnlichem) als 'public' abgeleitet werden (es wurde kein Schlüsselwort angegeben, so dass der Compiler es standardmäßig auf 'private' setzt).
- Fehlender Tag in Datumsmodul (V719, CalcViewModel DateCalculator.cpp Zeile 279):
- Die Switch-Anweisung deckt nicht alle Werte der Enum (Auflistung) 'DateUnit' ab.
- Verdächtiger Vergleich von realen Zahlen (V550, Calculator AspectRatioTrigger.cpp Zeile 80): Der Code enthält einen merkwürdigen Vergleich zweier realer Zahlen (Fließkommawerte) der Art ratio == threshold. Es ist wahrscheinlich besser, einen Vergleich mit definierter Genauigkeit zu verwenden: fabs(A — B) < Epsilon.
An dieser Stelle breche ich die Auflistung mal ab. Der Beitrag auf habr.com enthält eine ganze Latte weiterer solcher Stilblüten im Programmcode. Gut, Fehler können immer passieren – das weiß ich auch – obwohl meine Zeiten als Entwickler ein Viertel-Jahrhundert vorbei sind. Aber es stellt sich schon die Frage, wie es mit der Code-Qualität aus Redmond bestellt ist.
Ein paar Gedanken
Denn der jetzt freigegebene Code ist ja quasi so etwas wie eine Arbeitsprobe, die Redmond vorgelegt hat. Wieso nutzt das Unternehmen nicht selbst solche Tools zur Code-Analyse? Meine Einschätzung: Der Windows-Rechner ist nicht wichtig, da hat niemand Erfahrenes hingesehen. Der Windows-Rechner wurde imho wohl nach dem Erstellen von Generationen von 'Freshmen' bei Microsoft weiter entwickelt, die dann für solche Kalauer im Code sorgten.
Es stellt sich natürlich die Frage, wie es mit dem Code und dessen Qualität in anderen Modulen ausschaut. Ich bin ja nun schon länger im Geschäft und erinnere mich an eine Episode mit einem Script-Debugger, der von Microsoft zur Jahrtausendwende für das Debuggen von WSH-Scripten benutzt werden konnte. Das Teil hatte unendlich viele Macken und ein deutscher Entwickler, der seinerzeit in den USA lebte, wollte den Debugger überarbeiten. Ich stand mit ihm per Mail in losem Kontakt, weil ich damals Bücher zu Windows Script Host (auch bei Microsoft Press) veröffentlicht hatte. Der gute Mann hatte Zugriff auf den Quellcode des Microsoft Debuggers – schrieb aber am Ende des Tages seinen eigenen Debugger von Grund auf neu. Das Ergebnis war der PrimalScript-Debugger von SAPIEN.
Anzeige
Ich wette da schlummern noch ganz andere Sachen im Windows allgemein, und ich denke wenn MS den Quellcode des Systems veröffentlichen würde gäbe es eine mittelschwere bis große Blamage.
Ich sage es ja immer wieder, MS solle alles neumachen, dann aber richtig.
können die doch gar nicht mehr, die Programmierer in Redmonde sind doch heute gar nicht mehr dazu in der Lage etwas ganz neues zu basteln. Selbst Bill Gates war nicht dazu in der Lage und hat MS-DOS auch nur von jemanden anderen gekauft und umbenannt.
Also wenn ich so ein Programm unter die MIT-Lizenz stellen würde, würde ich den Code doch vorher mal bereinigen um nicht ganz so Dumm da zu stehen.
Zu MS-DOS:
Zumindest Teile von MS-DOS wurden seinerzeit aus Caldera-DOS "geklaut".
In den jahrelangen Urheberrechts-Prozessen ging Caldera insolvent. Caldera schien im Recht, aber MS hatte finanziell den längeren Atem und hat durch ständige Revision der Urteile Caldera "tot prozessiert".
Ist doch immer die gleiche Geschichte.
Bübchen wie Gates oder Zuckerberg mit ihren Unschuldsmienen sind im Grunde eiskalte Typen, die ohne mit der Wimper zu zucken andere Leute in eine Grube schmeißen und diese dann seelenruhig zuschaufeln und ihre hörigen Anhänger ihnen alles glauben und abkaufen. Und die Verantwortlichen, die es unterbinden könnten sind zu blöd.
Nur mit dieser Lebenseinstellung wird man steinreich.
Caldera und Microsoft einigten sich auf einen Vergleich, der Caldera immerhin 280 Millionen USD einbrachte. Aber nicht wegen geklauter Programmbestandteile, sondern weil Caldera Microsoft eine Zwangsbündelung von MS-DOS 7.0 und Windows 95 nachweisen konnte, die den Wettbewerb behinderte. Der Untergang von DR-DOS begann aber bereits Jahre zuvor.
Das ist so nicht korrekt. Natürlich hätte Gates etwas eigenes programmieren können. Ihm fehlte dazu aber schlicht die Zeit. Er hatte bereits Verträge zur Lieferung eines Betriebssystems abgeschlossen und daher einfach die Exklusivrechte an Tim Pattersons QDOS erworben, das fortan als MS-DOS vertrieben wurde. Patterson arbeitete danach auch 1 Jahr bei Microsoft.
QDOS war zu der Zeit noch längst nicht ausgereift, fand aber z. B. im Fairlight CMI Musikcomputer Verwendung, mit dem Peter Gabriel das ausgefeilte Album 4 produzierte. (Kleine Anekdote am Rande. Steve Wonder gehörte ebenfalls zu den ersten Verwendern des Fairlight, obwohl er diesen wegen des Lichtgriffels vermutlich nicht selbst bedienen konnte).
Ja, diese offensichtlichen Macken sind NICHT schön, aber (wie fast immer) ist die Qualität des Codes insgesamt DEUTLICH besser als ihr Ruf und der übliche OpenSource-SCHROTT:
https://habr.com/en/company/pvs-studio/blog/443656/
"As for comparing with the quality of the calculator from the Windows world, the utility from Microsoft looks more reliable and well-worked so far. "
Kein Wunder, dass MS PAINT einstampfen will. Ich glaube, das Prpgramm hat sich seit Windows 1.o kaum verändert. Trotzdem hätte ich was dagegen, wenn PAINT weg wäre.
Profis verrichten ihre Arbeit nicht oder Azubis fehlt der Ausbilder. Ein Armutszeugnis für einen Software-Konzern so etwas zu publizieren, damit andere aufräumen.
Jetzt muss ich die letzte verbliebene App Calc aus dem Installations-Image raus"patch"en.