Desbordamiento de enteros en Java

Las vulnerabilidades por Integer Overflow (desbordamiento de enteros) son muy conocidas en lenguajes como C o C++, pero no tanto en Java.

Recientemente he estado experimentando con la posibilidad de realizar overflow de diferentes tipos de datos en Java (short, byte, int, etc.).

Me resulta curioso ver que algunos de ellos no est?n controlados por la m?quina virtual. Por ejemplo, si mediante la clase Integer se desborda un entero, se lanza una excepci?n. Pero si se desborda un short o un byte, no ocurre nada…

Pego un ejemplo:

public class ShortOverflow
{
  public static void main(String args[])
  {
     if(args.length<1)
        return;

     short num = Integer.valueOf(args[0]).shortValue();
     System.out.println("num: "+num);

     if(num>100)
        System.out.println("num > 100");
     else
        System.out.println("num < 100");
  }
}

$ javac ShortOverflow.java
$ java ShortOverflow 100
num: 100
num < 100

$ java ShortOverflow 101
num: 101
num > 100

$java ShortOverflow 100000
num: -31072
num > 100

Me pregunto si actualmente los cazadores de bugs mirar?n estas cosas. En cualquier caso, si alguien tiene m?s informaci?n sobre el tema agradecer?a sus comentarios.

M?s informaci?n en h4ck1t.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>