Reino: Code Quality
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.
Code Correctness: clone() Invokes Overridable Function
Abstract
El método
clone()
de la clase llama a una función que puede anularse.Explanation
Cuando una función
Ejemplo 1: la siguiente función
Como la función
clone()
llama a una función que se puede sobrescribir, puede que el clon se quede en un estado parcialmente inicializado o que se dañe.Ejemplo 1: la siguiente función
clone()
llama a un método que se puede sobrescribir.
...
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 la función
doSomething()
y su clase envolvente no son final
, la función se puede sobrescribir, lo que podría dejar al objeto clonado clone
en un estado parcialmente inicializado, lo que podría dar lugar a errores o que funcionase en torno a la lógica de forma inesperada.References
desc.structural.java.code_correctness_clone_invokes_overridable_function