Reino: Code Quality
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.
Code Correctness: clone() Invokes Overridable Function
Abstract
O método
clone()
na classe chama uma função que pode ser substituída.Explanation
Quando uma função
Exemplo 1: A função
Como a função
clone()
chama uma função substituível, ela pode fazer com que o clone seja deixado em um estado parcialmente inicializado ou se torne corrompido.Exemplo 1: A função
clone()
a seguir chama um método que pode ser substituído.
...
class User implements Cloneable {
private String username;
private boolean valid;
public Object clone() throws CloneNotSupportedException {
final User clone = (User) super.clone();
clone.doSomething();
return clone;
}
public void doSomething(){
...
}
}
Como a função
doSomething()
e a sua classe delimitadora não são final
, significa que a função pode ser substituída, o que pode deixar o objeto clone
clonado em um estado parcialmente inicializado, capaz de provocar erros, se não estiver trabalhando em torno da lógica de uma forma inesperada.References
desc.structural.java.code_correctness_clone_invokes_overridable_function