Archivo de Julio 2007

Desbordamiento de enteros Vs. truncamiento/redondeo

Jueves, 26 de Julio de 2007

En Kriptopolis hay un post interesante que abre un debate sobre si Java es o no es explotable a partir del desbordamiento de enteros. Este “efecto”, que en C se puede combinar con otros para romper una aplicación, en Java se convierte en un truncamiento documentado del valor que supuestamente se desborda.
Está bien leer el artículo entero (y el original también en h4ck1t) y además los comentarios.

Personalmente creo que no es explotable. El caso solo se produce cuando necesitamos parsear un valor y utilizamos el método incorrecto.

Produce truncamiento:

short importe = Integer.valueOf(args[1]).shortValue();

No produce truncamiento (lanza excepcion si lo encuentra):

short importe = Short.valueOf(args[1]).shortValue();

Si necesitas un short ¿que sistema de parseado utilizarías? El segundo, ya que se apoya en el objeto wraper de short, que es java.lang.Short, el cual si lanza un NumberFormatException si el valor no “cabe” en un short (entre -32768 y 32767).