Schwerer Bug im Just-In-Time-Compiler in .NET 4.6

Der Dotnet-Doktor  –  0 Kommentare

In dem am 20.7.2015 veröffentlichten .NET Framework 4.6 ist ein signifikanter Bug enthalten, der dazu führen kann, dass in bestimmten Situationen Methoden falsche Parameter erhalten. Die aufgerufene Methode erhält in bestimmten Situationen nicht den übergebenen Wert, sondern einen zufälligen Wert. Dies führt zum Fehlverhalten von Anwendungen, die mit .NET 4.6 betrieben werden.

Verursacher ist die Tail Code Optimization im neuen Just-in-Time-Compiler RyuJIT für 64-Bit-Anwendungen, der schneller als der Vorgänger JIT64 arbeitet. Microsoft hat das Problem erkannt und den Fehler im Quellcode bereits behoben. Die Veröffentlichung eines Hotfixes steht aber noch aus. Der zugehörige interne Prozess für die Veröffentlichung habe aber begonnen.

Warnung vor dem Einsatz von .NET 4.6

Bemerkt hat den Fehler die Website stackoverflow.com. Das Problem ist weder bei Microsofts internen Tests noch Kunden in den Vorabversionen aufgefallen. Während stackoverflow.com grundsätzlich davor warnt, .NET 4.6 einzusetzen, schlägt Microsoft vor, für C# und Visual Basic .NET einfach den RyuJIT bzw. die Tail Code Optimization abzuschalten: "It is perfectly safe to run the .NET Framework 4.6 with tail call optimizations disabled, while you are waiting for the patch", schreibt Rich Lander im .NET-Blog. "We recognize that this bug is very real to StackExchange, and conclude that they are one of the few cases that have and will hit it."

Lediglich F# sollte laut Microsoft vorläufig gar nicht mit .NET 4.6 betrieben werden: "F# developers are encouraged to wait to deploy the .NET Framework 4.6. This issue affects F# programs more commonly."

Zugleich entschuldigt sich Microsoft für das Problem. "We know that you rely on us to provide high-quality software. We take that very seriously."