Desbordamiento aritmético
No puede tener desbordamientos aritméticos en PHP, al menos no en el sentido de que el número se ajusta, lo que lleva a un resultado menor que el esperado (que es el tipo que puede tener implicaciones de seguridad).
Hay dos razones para esto:
- si un entero se incrementa por encima de su límite, se convierte automáticamente a flotante.
- si un flotador se incrementa por encima de su límite, se establece automáticamente en INF, que se trata como el valor más grande.
Puedes intentarlo tú mismo:
$max = PHP_INT_MAX;
var_dump($max); // int 9223372036854775807
$max = PHP_INT_MAX + 1;
var_dump($max); // float 9.2233720368548E+18
$max_float = 1.8e307;
var_dump($max_float); // float 1.8E+307
$max_float = 1.8e307 * 10;
var_dump($max_float); // float INF
Funciona de la misma manera para números negativos.
Pero a pesar de que no tiene un desbordamiento de enteros en el sentido tradicional, todavía puede tener problemas. Considere, por ejemplo, estos casos:
PHP_INT_MAX < (PHP_INT_MAX + 1) // -> false
PHP_INT_MAX == (PHP_INT_MAX + 1) // -> true
Desbordamiento aritmético
Puedes tener subflujos en PHP:
$min_float = 9.8813129168249E-324;
var_dump($min_float); // float 9.8813129168249E-324
$min_float = 9.8813129168249E-324 / 10;
var_dump($min_float); // float 0
Como 0
es igual a un número de cosas, entre ellas NULL
, false
, "0"
, "foobar"
, esto puede causar problemas en algunas situaciones. Pero estos problemas no son realmente un resultado del desbordamiento.
Desbordamiento de búfer
Pueden existir desbordamientos de búfer en PHP debido a las vulnerabilidades en el propio PHP, pero no debido al código de la aplicación.
Aquí hay una lista de algunos vulnerabilidades de desbordamiento de búfer en PHP .