我在一个Java项目上使用“ HP Fortify v3.50”,但由于“ Fortify”看不到针对null的控件是另一种方法,因此在“ Null Dereference”上发现了很多误报。如何减少误报并维持规则?
这是一个POC
public class MyClass {
public static void main(String[] args) {
String string01 = null;
String string02 = null;
int i;
if (args[0].equals("A")) {
string01 = "X";
string02 = "Y";
}
if (!isNull(string02)){
i = string02.length();} //False Positive
else {
i = string02.length();
} // Yes, it is an error!
}
public static boolean isNull(Object toBeTested){
return (null == toBeTested);
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
[E8837DB548E01DB5794FA71F3D5F51C8 : medium : Null Dereference : controlflow ]
MyClass.java(13) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试选择<BBB>
在他们的后代中至少有两个不同深度的相同类型元素的元素.我发现它有可能:
//BBB//BBB//BBB
Run Code Online (Sandbox Code Playgroud)
但如果我想改变查询的深度,我必须写:
//BBB//BBB//BBB//BBB
or
//BBB//BBB
Run Code Online (Sandbox Code Playgroud)
是否可以使用参数指定查询的深度?