wtorek, 8 lutego 2011

Jaki jest Twój ulubiony numer?

Ostatnio wśród wielbicieli i zagorzałych przeciwników Javy modne stało się pytanie o ulubioną liczbę.
Skąd takie pytanie?
Otóż jest pewien wartość sprawiająca Javie kłopoty.

Jaki jest Twoim zdaniem efekt uruchomienia programu:

package pl.matt.fne;

public class Main {
public static void main(String[] args) {
double d = Double.valueOf("22.250738585072012e-309");
System.out.println(d);
}
}

No więc niestety. Program uruchamia się bez końca. Po prostu się zapętla. Także ulubionym numerem prawdziwego hakera jest ostatnio:
22.250738585072012e-309.

Próbę wytłumaczenia tego fenomenu można znaleźć pod tym adresem. Ja niestety wymiękłem podczas analizy klasy FloatingDecimal.

22.250738585072012e-309 to bardzo przebiegła liczba.
Spróbujmy skompilować program:

package pl.matt.fne;

public class Main {
public static void main(String[] args) {
double d = 22.250738585072012e-309;
System.out.println(d == 12);
}
}

Znowu niespodzianka.
javac też się zawiesza.

Czy ta ciekawostka może być groźna.
Ano może.
Wyobraźmy sobie aplikację, która przyjmuje podaną użytkownika liczbę niecałkowitą i konwertuje ją do zmiennej typu double.
Odpowiednio spreparowane żądanie do takiej aplikacji może na zawsze zająć jej wątek. Atak DoS jak się patrzy.
Spróbuję w przyszłym tygodniu przygotować przykład ilustrujący ten scenariusz.

Tymczasem Oracle wypuścił patcha mającego wyeliminować powyższe niedogodności.
Działa u was?
Ja jeszcze nie instalowałem.

niedziela, 6 lutego 2011

Software Developers Journal i ja

Styczeń zaczął się upalnie. Wyjechałem do Tajlandii, wszedłem na palmę


po czym pognałem co tchu do słonecznej Kalifornii.

Nie zapomniałem jednak o Javie. W magazynie Software Developers Journal ukazał się właśnie artykuł mego autorstwa "Wszystko w jednym – JBoss SEAM".
Pamiętacie jeszcze to czasopismo? Od jakiegoś czasu nie ukazuje się już wersja drukowana. Jest za to darmowy PDF.

Zapraszam do lektury!