界: Code Quality

代码质量不佳会导致不可预测的行为。对于用户来说,通常表现为可用性差。对于攻击者来说,提供了以意外方式对系统施加压力的机会。

Code Correctness: clone() Invokes Overridable Function

Abstract
类中的 clone() 方法会调用可以被覆盖的函数。
Explanation
clone() 函数调用了可覆盖的函数后,会导致克隆初始化仅部分完成,或者破坏该克隆。

示例 1:以下 clone() 函数调用了可覆盖的方法。


...
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(){
...
}
}


由于函数 doSomething() 和其封装类并非 final,这意味着该函数是可覆盖的,这将导致其克隆对象 clone 呈部分初始化状态,如果没有通过意外方式变通逻辑,则会导致错误。
References
[1] MET06-J. Do not invoke overridable methods in clone() CERT
[2] EXTEND-5: Limit the extensibility of classes and methods Oracle
desc.structural.java.code_correctness_clone_invokes_overridable_function