[hyddd的Fortify SCA分析Java代码记录][Control Flow]Missing Check for Null Parmater
2009-02-25 14:39 hyddd 阅读(1357) 评论(0) 编辑 收藏 举报这个和Findbugs的[M C NP] Method call passes null for unconditionally dereferenced parameter比较类似,可以参考一下。
虽然都是同一类的问题,但Fortify和Findbugs对问题的侧重点不一样,可能是规则不一样。先看看下面代码:
public static Map.Entry[] getSortedHashtableByValue(Hashtable h) {
Set set = h.entrySet();
Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set
.size()]);
Arrays.sort(entries, new Comparator() {
public int compare(Object arg0, Object arg1) {
int key1 = (Integer) ((Map.Entry) arg0).getValue(); //需要检查arg0是否为null
int key2 = (Integer) ((Map.Entry) arg1).getValue(); //需要检查arg1是否为null
return ((Comparable) key2).compareTo(key1);
}
});
return entries;
}
Set set = h.entrySet();
Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set
.size()]);
Arrays.sort(entries, new Comparator() {
public int compare(Object arg0, Object arg1) {
int key1 = (Integer) ((Map.Entry) arg0).getValue(); //需要检查arg0是否为null
int key2 = (Integer) ((Map.Entry) arg1).getValue(); //需要检查arg1是否为null
return ((Comparable) key2).compareTo(key1);
}
});
return entries;
}
上面这段代码,在注释处要判断传入参数arg0和arg1是否为null,否则直接使用有可能会抛异常。这个问题Fortify能发现,而FindBugs没找到。但是FindBugs认为有需要检查的地方,Fortify却没有找到,示例代码在[M C NP] Method call passes null for unconditionally dereferenced parameter里面。大家可以品味一下两者的区别,Fortify是在调用函数后使用变量前检查,FindBugs是在调用函数前检查,所以两者发现的问题不一样。
作者:hyddd
出处:http://www.cnblogs.com/hyddd/
本文版权归作者所有,欢迎转载,演绎或用于商业目的,但是必须说明本文出处(包含链接)。