Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.
bytes16 data = "data";
Missing
frente a missing
).
pragma solidity 0.4.20;
contract Missing {
address private owner;
function missing() public {
owner = msg.sender;
}
}
pragma
flotante y el compilador Solidity no está bloqueado a una versión específica.pragma
para que el contrato inteligente no se compile en versiones anteriores a la 0.4.5 y tampoco funcionará en compiladores de la versión 0.5.0 y posteriores.
pragma solidity ^0.4.5;
unsigned char
a un int
, pero el valor devuelto se asigna a un tipo char
.EOF
.EOF
.
char c;
while ( (c = getchar()) != '\n' && c != EOF ) {
...
}
getchar()
se convierte en un char
y se compara con EOF
(un int
). Suponiendo que c
sea un valor de 8 bits con signo y que EOF
sea un valor de 32 bits con signo, entonces si getchar()
devuelve un carácter representado por 0xFF, el valor de c
producirá una extensión de signo para 0xFFFFFFFF en la comparación con EOF
. Como EOF
se define normalmente como -1 (0xFFFFFFFF), el bucle finalizará de forma errónea.amount
puede albergar un valor negativo cuando se devuelve. Como la función se declara para devolver un entero sin signo, amount
se convierte implícitamente a sin signo.
unsigned int readdata () {
int amount = 0;
...
if (result == ERROR)
amount = -1;
...
return amount;
}
Example 1
, el valor devuelto de readdata()
será 4,294,967,295 en un sistema que utiliza enteros de 32 bits.accecssmainframe()
, la variable amount
puede albergar un valor negativo cuando se devuelve. Como la función se declara para devolver un valor sin signo, amount
se convertirá implícitamente en un número sin signo.
unsigned int readdata () {
int amount = 0;
...
amount = accessmainframe();
...
return amount;
}
accessmainframe()
es -1, entonces el valor devuelto de readdata()
será 4,294,967,295 en un sistema que utilice enteros de 32 bits.