界: 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