Desbordamiento de enteros Vs. truncamiento/redondeo
Jueves, 26 de Julio de 2007En 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).















