赞
踩
1.IS2_INCONSISTENT_SYNC 多线程错误 - 不一致的同步
get,set方法上加synchronized
2.EI_EXPOSE_REP2 恶意代码漏洞 - 可能暴露内部实现,通过与可变对象引用协作
Set或构造方法里发生(当对象为Date或数组时发生)
public void setAsd(Date asd) {
if (asd != null) {
this.asd = (Date)(asd.clone());
} else {
this.asd = null;
}
}
public synchronized void setArr(String[] arr) {
this.arr = Arrays.copyOf(arr, arr.length);
}
public InputParameters(
this.arr = Arrays.copyOf(arr, arr.length);
}
3.EI_EXPOSE_REP 恶意代码漏洞 - 可能通过返回一个可变对象的引用暴露了内部实现
Get方法里发生(当对象为Date或数组时发生)
public Date getAsd() {
if (this.asd != null) {
return new Date(this.asd.getTime());
} else {
return null;
}
}
public synchronized String[] getArr() {
return Arrays.copyOf(this.arr, arr.length);
}
4.DLS_DEAD_LOCAL_STORE 高危 - 未用的局部变量
5.NM_METHOD_NAMING_CONVENTION 方法名应该以小写字母开头
6.MS_SHOULD_BE_FINAL 恶意代码漏洞 - 属性不是final,但是应该设置成final
public static final String TPDM_SOFTWARE_TYPE_CREATE = "新增";
7.SE_BAD_FIELD 在序列化类中出现了非transient也非serializable的实例属性
序列化VO引用非序列化VO,将非序列化VO实现序列化
// 角色列表
private List<BaseRoleVO> roleList = new ArrayList<BaseRoleVO>();
序列化类引用非序列化接口,将接口用transient修饰词修饰
private transient IMessageSender messageSender;
8.SBSC_USE_STRINGBUFFER_CONCATENATION 性能 - 方法在循环中使用+进行字符串拼接
For example:
// This is bad
String s = "";
for (int i = 0; i < field.length; ++i) {
s = s + field[i];
}
// This is better
StringBuffer buf = new StringBuffer();
for (int i = 0; i < field.length; ++i) {
buf.append(field[i]);
}
String s = buf.toString();
9.RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE 高危 - 对一个已知不是null的值重复进行空值判断
10.URF_UNREAD_FIELD 性能 - 读不到的属性
没有引用的属性,删除即可
11.STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE 多线程错误 - 调用静态DateFormat
For example:
// This is bad
private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.format(new Date())
// This is better
private static final String sdf = "yyyy-MM-dd HH:mm:ss";
new SimpleDateFormat(sdf).format(new Date())
12.OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE 方法可能因为checked exception导致清理流或资源失败
finally块里关流
13.DM_BOXED_PRIMITIVE_FOR_PARSING
这个错误是用封包/拆包来对付基本类型的转换了
意思就是不需要新建对象来对付基本类型的转换,直接取值就可以了
14.RV_RETURN_VALUE_IGNORED_BAD_PRACTICE 不良实践 - 方法忽略异常返回值
文件创建以及删除等,返回值是否成功需要进行判断和处理
15.ES_COMPARING_STRINGS_WITH_EQ 不良实践 - 使用== 或 !=比较String
16.RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE 错误用法 - 判断值是否为null
需要进行空值判断以防止发生空指针异常
17.RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT 有返回值,但是未使用。
Get某属性,但没有引用,删除即可
18.DM_STRING_VOID_CTOR 性能 - 方法调用了低效的new String()构造方法
把new String()删除或者改为+“”
19.NP_NULL_ON_SOME_PATH 错误用法 - 可能出现空指针引用
需要进行空值判断以防止发生空指针异常
20.DM_DEFAULT_ENCODING 信任默认字符编码
流操作需要指定编码
21.RC_REF_COMPARISON 不良实践 - 怀疑进行了引用比较
字符串用equals比较,不要用==
22.DM_NUMBER_CTOR 性能 - 方法调用低效的数字构造方法;使用静态valueOf代替
new Long(cover)改为Long.parseLong(cover)
23.NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE 高危 - 调用返回值可能出现null值
需要进行空值判断以防止发生空指针异常
24. REC_CATCH_EXCEPTION 高危 - 捕获了没有抛出的异常
捕捉Exception改为捕捉对应异常
25.ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD 高危 - 通过一个实例方法更新静态属性
不要用实例方法更新静态属性
26.OBL_UNSATISFIED_OBLIGATION 试验 - 方法可能在清理流或资源时失败
finally块里关流
27. UWF_UNWRITTEN_FIELD 错误用法 - 未赋值属性
有get方法无对应正确的set方法,导致属性永远都为空
28.DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD 无用的局部变量可能与实例属性同名
Set方法里factor = factor;改为this.factor = factor
29. DMI_HARDCODED_ABSOLUTE_FILENAME 此代码使用硬编码到绝对路径名构造一个 File 对象
改为用配置文件配置文件路径而不是用硬编码
30. SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD 局部变量给自己赋值而不是赋值到实例变量中
Set方法里factor = factor;改为this.factor = factor
31. BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY 错误用法 - 集合转换为数组元素时发生的类型转换错误 String[] strs = Arrays.asList( objs ).toArray( new String[0] );
For example:
// This is bad
APWFREC_PAYMENT_HEAD_NEW[] arr = (APWFREC_PAYMENT_HEAD_NEW[]) list.toArray();
// This is better
APWFREC_PAYMENT_HEAD_NEW[] arr = list.toArray(new APWFREC_PAYMENT_HEAD_NEW[list.size()]);
32.BX_UNBOXING_IMMEDIATELY_REBOXED 装箱的值被拆箱,然后立刻重新装箱了
基本类型和引用类型适当转换,不要重复转换,基本——引用——基本
33. OS_OPEN_STREAM 不良实践 - 方法可能在关闭流时失败
finally块里关流
34.SA_FIELD_SELF_ASSIGNMENT 错误用法 - 属性自身赋值
没有引用的属性,删除即可
35. UCF_USELESS_CONTROL_FLOW 高危 - 无用控制流
无用if判断(if判断里空语句),删除即可
36. UC_USELESS_OBJECT 我们的分析表明,这个对象是无用的。 它被创建和修改,但它的价值永远不会超出方法或产生任何副作用。 要么存在错误,并且打算使用对象,要么可以将其删除。
创建无用对象(没地方使用),删除即可
37. UC_USELESS_VOID_METHOD 我们的分析表明,这种非空的 void 方法实际上并没有执行任何有用的工作。 请检查一下:可能是它的代码有错误,或者它的主体可以被完全删除。
无用方法,里面语句没有任何用处,删除即可
38.DMI_USELESS_SUBSTRING 高危 - 调用substring(0)会返回原值
用方法substring(0),无效方法,调用返回原值,删除不调用
39. EC_NULL_ARG 错误用法 - 使用空参数调用equals()
equals(null)改为== null
40. EC_UNRELATED_TYPES 使用错误 - 使用equals()比较不同类型
Integer和String用equals比较,不可取,删除
41. NM_CLASS_NAMING_CONVENTION 类名应该以大写字母开头
42. NP_GUARANTEED_DEREF 错误用法 - null值一定会被调用
需要进行空值判断以防止发生空指针异常
43. NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH 错误用法 - null值会在exception处理中被用到
需要进行空值判断以防止发生空指针异常
44. NP_NULL_ON_SOME_PATH_EXCEPTION 错误用法 - 方法的异常路径中可能引用空指针
需要进行空值判断以防止发生空指针异常
45. NP_NULL_PARAM_DEREF 错误用法 - 方法调用把null传递给一个非null参数
被调用的方法需要进行空值判断以防止发生空指针异常
46. NP_NULL_PARAM_DEREF_NONVIRTUAL 使用错误 - 非虚拟方法调用向非空参数传入了null
被调用的方法需要进行空值判断以防止发生空指针异常
47. RV_RETURN_VALUE_IGNORED 错误用法 - 方法忽略了返回值
返回值未使用,删除即可
48. SA_LOCAL_DOUBLE_ASSIGNMENT 高危 - 给局部变量双重赋值
String title = title = "[驳回单]" + cont + "APW驳回";
改为
String title = "[驳回单]" + cont + "APW驳回";
49. SF_SWITCH_NO_DEFAULT Switch语句中没有包含default
50. UUF_UNUSED_FIELD 性能 - 无用的属性
无用属性,删除即可
51. MS_MUTABLE_COLLECTION 可变集合实例被分配给final的静态字段,因此可以被恶意代码或意外更改。
需要修改为private类型,防止被篡改,提供一个公共方法调用
public static Map<Integer,String> getPrdConsentAuditMap(){
return Collections.unmodifiableMap(PRD_CONSENT_AUDIT_MAP);
}
public static List<Integer> getPrepayNodeSeqList(){
return Collections.unmodifiableList(PREPAY_NODE_SEQ_LIST);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。