界: Code Quality
代码质量不佳会导致不可预测的行为。对于用户来说,通常表现为可用性差。对于攻击者来说,提供了以意外方式对系统施加压力的机会。
Code Correctness: clone() Invokes Overridable Function
Abstract
类中的
clone()
方法会调用可以被覆盖的函数。Explanation
当
示例 1:以下
由于函数
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
desc.structural.java.code_correctness_clone_invokes_overridable_function