Die Kompilierung hängt für eine Klasse mit dem Feld double d = 2.2250738585072012e-308

7

Ich bin auf eine interessante Situation gestoßen. Ein Kollege hat einige Änderungen vorgenommen, die auf meiner Maschine weder von der IDE (Eclipse) noch von einer Kommandozeile (Maven) kompiliert werden. Das Problem, das sich im Kompilierungsprozess manifestiert, der 100% CPU verbraucht und nur den Prozess zunichte macht, würde helfen, es zu stoppen. Nach einer gewissen Analyse wurde die Ursache des Problems lokalisiert und behoben. Es stellte sich heraus, dass eine Zeile "double d = 2.2250738585072012e-308" (ohne Semikolon am Ende) in einer der Schnittstellen war. Der folgende Ausschnitt dupliziert es.

%Vor%

Warum würde der Compiler hängen? Ein Sprachkantenfall?

    
01es 04.02.2011, 08:16
quelle

4 Antworten

16

Es ist ein Fehler im String-to-Double-Konvertierungsalgorithmus der JVM: Ссылка

Sie können den gleichen Hang erhalten, wenn Sie versuchen, diese Zeichenfolge zur Laufzeit zu analysieren. Der Compiler hängt, weil er denselben Code verwendet (es ist immerhin ein Java-Programm).

Update: Das Problem hat jetzt eine CVE -Kennung ( CVE-2010-4476 ) und ein Patch (für Oracle JVMs, funktioniert auch auf OpenJDK).

Laut dem Patch läuft alles darauf hinaus ein Fehler nach dem anderen.

    
Joachim Sauer 10.02.2011, 16:01
quelle
5

Dies ist ein bekanntes Problem, das vor ein paar Tagen in den Nachrichten war. Weitere Informationen hier .

    
Sanjay T. Sharma 04.02.2011 08:18
quelle
3

Dies ist ein offener Fehler seit über 10 Jahren. Schlechte Sonne.

Die Tatsache, dass Java-Systeme nicht in Massen angegriffen und getötet wurden, beweist, dass es wirklich sehr wenige unartige Menschen auf der Erde gibt.

    
irreputable 04.02.2011 23:21
quelle
1

Oracle hat einen Hotfix veröffentlicht, der hier zu finden ist:

Ссылка

Der Hotfix funktioniert für Java 1.4, 1.5 und 1.6.

    
Tim Funk 10.02.2011 15:51
quelle

Tags und Links