Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
bytes16 data = "data";
Missing
vs missing
).
pragma solidity 0.4.20;
contract Missing {
address private owner;
function missing() public {
owner = msg.sender;
}
}
pragma
flutuante e o compilador Solidity não está bloqueado para uma versão específica.pragma
para que o contrato inteligente não seja compilado em versões anteriores à 0.4.5 e também não funcione em compiladores da versão 0.5.0 e posteriores.
pragma solidity ^0.4.5;
unsigned char
convertido em int
, mas o valor de retorno é atribuído a um tipo char
.EOF
.EOF
.
char c;
while ( (c = getchar()) != '\n' && c != EOF ) {
...
}
getchar()
é convertido em char
e comparado com EOF
(um int
). Supondo que c
seja um valor de 8 bits com sinal e EOF
seja um valor de 32 bits com sinal, se getchar()
retornar um caractere representado por 0xFF, o valor de c
será o sinal estendido para 0xFFFFFFFF em comparação com EOF
. Como EOF
é normalmente definido como -1 (0xFFFFFFFF), o loop terminará erroneamente.amount
pode conter um valor negativo ao ser retornada. Como a função é declarada para retornar um inteiro sem sinal, amount
será implicitamente convertido em um valor sem sinal.
unsigned int readdata () {
int amount = 0;
...
if (result == ERROR)
amount = -1;
...
return amount;
}
Example 1
for atendida, o valor de retorno de readdata()
será 4.294.967.295 em um sistema que usa inteiros de 32 bits.accecssmainframe()
, a variável amount
pode conter um valor negativo ao ser retornada. Como a função é declarada para retornar um valor sem sinal, amount
será implicitamente convertido em um número sem sinal.
unsigned int readdata () {
int amount = 0;
...
amount = accessmainframe();
...
return amount;
}
accessmainframe()
for -1, o valor de retorno de readdata()
será 4.294.967.295 em um sistema que usa inteiros de 32 bits.