SV.CLONE.SUP

类定义调用 super.clone() 但是不实施 Cloneable 接口的克隆方法时,会出现该错误。

漏洞与风险

如果对象不实施 Cloneable,则 Object.clone() 方法会引发异常,这可能不是这种情况下的预计行为。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

如果目的是引发异常,则定义以下克隆方法:

复制
public final Object clone() throws CloneNotSupportedException 
{ 
   throw CloneNotSupportedException()
}

如果目的是定义适当的克隆方法,则类必须实施 Cloneable 接口。

示例 1

复制
  public class SV_CLONE_SUP_Sample_1 {
      private String password;
     protected SV_CLONE_SUP_Sample_1(String x) {
         password = x;
     }
     protected String getPassword() {
         return password;
     }
     protected final Object clone()
             throws CloneNotSupportedException {
         return super.clone();
     }
 }

针对第 18 行的类声明报告 SV.CLONE.SUP:类“com.klocwork.jdefects.checkers.ast.samples.SV_CLONE_SUP_Sample_1”实施“clone”方法,但是不实施 Cloneable,这可能使 Object 克隆实施引发异常