FindBugs错误修改中文说明大全汇总.docx
《FindBugs错误修改中文说明大全汇总.docx》由会员分享,可在线阅读,更多相关《FindBugs错误修改中文说明大全汇总.docx(101页珍藏版)》请在冰豆网上搜索。
![FindBugs错误修改中文说明大全汇总.docx](https://file1.bdocx.com/fileroot1/2023-1/24/687f1bd3-9f67-47df-b28f-460a58706158/687f1bd3-9f67-47df-b28f-460a587061581.gif)
FindBugs错误修改中文说明大全汇总
FindBug错误修改中文说明大全
复制你的Patternid然后用Ctrl+F快速查找定位
Security关于代码安全性防护
序号
Description
备注
1.
Dm:
Hardcodedconstantdatabasepassword
(DMI_CONSTANT_DB_PASSWORD)
代码中创建DB的密码时采用了写死的密码。
2.
Dm:
Emptydatabasepassword
(DMI_EMPTY_DB_PASSWORD)
创建数据库连接时没有为数据库设置密码,这会使数据库没有必要的保护。
3.
HRS:
HTTPcookieformedfromuntrustedinput
(HRS_REQUEST_PARAMETER_TO_COOKIE)
此代码使用不受信任的HTTP参数构造一个HTTPCookie.
4.
HRS:
HTTPResponsesplittingvulnerability
(HRS_REQUEST_PARAMETER_TO_HTTP_HEADER)
在代码中直接把一个HTTP的参数写入一个HTTP头文件中,它为HTTP的响应暴露了漏洞。
5.
SQL:
Noneonstantstringpassedtoexecutemethodonan
SQLstatement
(SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE)该方法以字符串的形式来调用SQLstatement的execute方法,
它似乎是动态生成SQL语句的方法。
这会更容易受到SQL注入
攻击。
6.
XSS:
JSPreflectedcrosssitescriptingvulnerability
(XSS_REQUEST_PARAMETER_TO_JSP_WRITER)
在代码中在JSP输出中直接与入一个HTTP参数,这会造成一个跨站点的脚本漏洞。
Experimental
序号
Description
备注
1.
LG:
PotentiallostloggerchangesduetoweakreferenceinOpenJDK
(LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)
OpenJDK的弓1入了一种潜在的不兼容问题,特别是,java.util.logging.Logger的行为改变时。
它现在使用内部弱引用,而不是强引用。
-logger配置改变,它就是丢失对logger的引用,这本是一个合理的变化,但不幸的是一些代码对旧的行为有依赖关系。
这意味看,当进行垃圾收集时对logger配置将会丢失。
例如:
publicstaticvoidinitLogging()throwsException{
Loggerlogger=
Logger.getLoggerC'edu.umd.cs");
logger.addHandler(newFileHandlerO);//calltochangeloggerconfiguration
logger.setUseParentHandlers(false);//anothercalltochangeloggerconfiguration
}
该方法结束时logger的引用就丢失了z如果你刚刚结束调用initLogging方法后进行垃圾回收,logger的
配置将会丢失(因为只有保捋记录器弱引用)。
publicstaticvoidmain(StringQargs)throws
Exception{
initLoggingO;//addsafilehandlertothelogger
System.gcO;//loggerconfigurationlost
Logger.getLoggerCedu.umd.esJ.infoCSomemessage");//thisisn'tloggedtothefileasexpected
}
2.
OBL:
Methodmayfailtocleanupstreamorresource(0BL_UNSATISFIED_0BLIGATION)
这种方法可能无法清除(关闭,处置)—个流,数据库对象,或其他资源需要一个明确的清理行动。
—般来说,如果一个方法打开一个流或其他资源,该方法应该使用try/finally块来确保在方法返回之刖流或资源已经被清除了。
这种错误模式基本上和OS_OPEN_STREAM和
ODR_OPEN_DATABASE_RESOURCE错误模式相同z但是是在不同在静态分析技术。
我们正为这个错误模式的效用收集反馈意见。
Badpractice代码实现中的一些坏习惯
J5
Description
备
注
1.
AM:
Createsanemptyjarfileentry(AM_CREATES_EMPTY_JAR_FILE_ENTRY)
调用putNextEntryO方法写入新的jar文件条目时立即调用doseEntry0方法。
这样会造成JarFile条目为空。
2.
AM:
Createsanemptyzipfileentry(AM_CREATES_EMPTY_ZIP_FILE_ENTRY)
调用putNextEntryO方法写入新的zip文件条目时立即调用closeEntry0方法。
这样会造成ZipFile条目为空。
3.
BC:
Equalsmethodshouldnotassumeanythingaboutthe
typeofitsargument
(BCEQUALSMETHODSHOULDWORKFORALLOBJECTS)
equals(Object。
)方法不能对参数。
的类型做任何的假设。
比较此对象与指定的对象。
当且仅当该参数不为null,并且是表示与此对象相同的类型的对象时,结果才为true0
4.
BC:
Randomobjectcreatedandusedonlyonce
(DMI_RANDOM_USED_ONLY_ONCE)
随机创建对象只使用过一次就抛弃
5.
BIT:
Checkforsignofbitwiseoperation(BIT_SIGNED_CHECK)检查位操作符运行是否合理
((event.detail&SWT.SELECTED)>0)
IfSWT.SELECTEDisanegativenumber,thisisacandidatefora
bug.EvenwhenSWT.SELECTEDisnotnegative,itseemsgood
practicetouse'!
=O'insteadof>O'.
6.
CN:
ClassimplementsCloneablebutdoesnotdefineoruseclonemethod(CNJDIOM)
按照惯例,实现此接口的类应该使用公共方法重写Object.clone(它
是受保护的),以获得有关重与此方法的详细信息。
此接口不包含clone方法。
因此,因为某个对象实现了此接口就克隆它是不可能的,应该实现此接口的类应该使用公共方法重与Object.clone
7.
CN:
clonemethoddoesnotcallsuper.clone()(CN_IDIOM_NO_SUPER_CALL)
个非final类型的类疋义了clone()方法而没有调用super.clone()方法。
例如:
B扩展自A,如果B中clone方法调用了spuer.clone(),而A中的clone没有调用spuer.clone(),就会造成结果类型不准确。
要求A的clone方法中调用spuer.cloneO方法。
8.
CN:
Classdefinesclone()butdoesn'timplementCloneable
(CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE)
类中定义了clone方法但是它没有实现Cloneable接口
9.
Co:
AbstractclassdefinescovariantcompareTo()method(CO_ABSTRACT_SELF)抽象类中定义了多个compareTo()方法正确的是覆写Comparable中的compareTo方法,方法的参数为Object类型,如下例:
intcompareTo(To)比较此对象与指定对象的顺序。
10.
Co:
CovariantcompareToQmethoddefined
NO_OBJECT)
类中定义了多个compareTo()方法z正确的是覆写Comparable中
的compareTo方法,方法的参数为Object类型
11.
DE:
Methodmightdropexception(DE_MIGHT_DROP)方法可能抛出异常
12.
DE:
Methodmightignoreexception(DE_MIGHT_IGNORE)方法可能忽略异常
13.
DMI:
Don'tuseremoveAlltoclearacollection
(DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION)
不要用removeAII方法去clear—个集合
14.
DP:
ClassloadersshouldonlybecreatedinsidedoPrivileged
block(DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED)类加载器只能建立在特殊的方法体内
15.
Dm:
MethodinvokesSystem.exit(...)(DM_EXIT)
在方法中调用System.exit(...)语句,考虑用RuntimeException来代
替
16.
Dm:
MethodinvokesdangerousmethodrunFinalizersOnExit(DM_RUN_FINALIZERS_ON_EXIT)
在方法中调用了System.runFinalizersOnExit或者
Runtime.runFinalizersOnExit方法z因为这样做是很危险的。
17.
ES:
ComparisonofStringparameterusing二二or!
=
(ES_COMPARING_PARAMETER_STRING_WITH_EQ)
用二二或者!
二方法去比较String类型的参数
18.
ES:
ComparisonofStringobjectsusing==or!
=
(es_comparing_strings_with_eq)
用一或者!
-去比较String类型的对象
19.
Eq:
Abstractclassdefinescovariantequals()method
(eq_abstract_self)
20.
Eq:
Equalschecksfornocompatibleoperand
(EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)
equals方法检杳不一致的操作。
两个类根本就是父子关系而去调用
equals方法去判读对象是否相等。
publicbooleanequals(Objecto){
if(oinstanceofFoo)
returnname.equals(((Foo)o).name);
elseif(oinstanceofString)
returnname.equals(o);
elsereturnfalse;
21.
Eq:
ClassdefinescompareTo(...)andusesObject.equalsO
(EQ_COMPARETO_USE_OBJECT_EQUALS)
类中定义了compareTo方法但是继承了Object中的compareTo方法
22.
Eq:
equalsmethodfailsforsubtypes
(EQ_GETCLASS_AND_CLASS_CONSTANT)
类中的equals方法可能被子类中的方法所破坏,当使用类似于
Foo.class==o.getClass()的判断时考虑用this.getClassO--
o.getClass()来替换
23.
Eq:
Covariantequals()methoddefined(EQ_SELF_NO_OBJECT)类中定义了多个equals方法。
正确的做法是覆写Object中的equals方法,它的参数为Object类型的对象。
24.
FI:
Emptyfinalizershouldbedeleted(FI_EMPTY)
为空的finalizer方法应该删除。
一下关于finalizer的内容省略
25.
GC:
Uncheckedtypeingenericcall
(GC.UNCHECKED_TYPE_IN_GENERIC_CALL)
ThiscalltoagenericcollectionmethodpassesanargumentwhilecompiletypeObjectwhereaspecifictypefromthegenerictypeparametersisexpected・Thus,neitherthestandardJavatypesystemnorstaticanalysiscanprovideusefulinformationonwhethertheobjectbeingpassedasaparameterisofanappropriatetype.
26.
HE:
Classdefinesequals()butnothashCode()
(HE_EQUALS_NO_HASHCODE)
方法定义了equals方法却没有定义hashCode方法
27.
HE:
ClassdefineshashCode()butnotequals()
(HE_HASHCODE_NO_EQUALS)
类定义了hashCode方法去没有定义equal方法
28.
HE:
Classdefinesequals()andusesObject.hashCode()
(HE_EQUALS_USE_HASHCODE)
一个类覆与了equals方法/殳有覆与hashCode方法使用了Object
对象的hashCode方法
29.
HE:
Classinheritsequals()andusesObject.hashCode()
(HE_INHERITS_EQUALS_USE_HASHCODE)
子类继承了父类的equals方法却使用了Object的hashCode方法
30.
IC:
Superclassusessubclassduringinitialization
(IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION)
子类在父类未初始化之前使用父类对象实例
publicclassCircularClassInitialization{
staticclassInnerClassSingletonextends
CircularClassInitialization{
staticInnerClassSingletonsingleton二new
InnerClassSingletonO;
}
staticCircularClassInitializationfoo二
InnerClassSingleton.singleton;
}
31.
IMSE:
DubiouscatchingofIllegalMonitorStateException
(IMSE_DONT_CATCH_IMSE)
捕捉违法的监控状态异常,例如当没有获取到对象锁时使用其wait和notify方法
32.
ISC:
Needlessinstantiationofclassthatonlysuppliesstaticmethods(ISC_INSTANTIATE_STATIC_CLASS)
为使用静态方法而创建一个实例对象。
调用静态方法时只需要使用类名+静态方法名就可以了。
33.
It:
Iteratornext()methodcan'tthrow
NoSuchElementException(IT_NO_SUCH_ELEMENT)迭代器的next方法不能够抛出NoSuchElementException
34.
J2EE:
StoreofnonserializableobjectintoHttpSession
(J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION)
在HttpSession对象中保存非连续的对象
35.
JCIP:
Fieldsofimmutableclassesshouldbefinal
(JCIP_FIELD」SNT_FINAL_IN」MMUTABLE_CLASS)
Theclassisannotatedwithnet.jcip.annotations.Immutable,
andtherulesforthatannotationrequirethatallfieldsarefinal.・
36.
NP:
MethodwithBooleanreturntypereturnsexplicitnull
(NP_BOOLEAN_RETURN_NULL)
返回值为boolean类型的方法直接返回null,这样会导致空指针异常
37.
NP:
equalsQmethoddoesnotcheckfornullargument
(np_equals_shouldJHANDLE_NULL_ARGUMENT)变量调用equals方法时没有进行是否为null的判断
38.
NP:
toStringmethodmayreturnnull
(NP_TOSTRING_COULD_RETURN_NULL)toString方法可能返回null
39.
Nm:
Classnamesshouldstartwithanuppercaseletter
(NM_CLASS_NAMING_CONVENTION)
类的名称以大写字母名称开头
40.
Nm:
ClassisnotderivedfromanException,eventhoughitisnamedassuch(NM_CLASS_NOT_EXCEPTION)
类的名称中含有Exception但是却不是一个异常类的子类,这种名称会造成混淆
41.
Nm:
Confusingmethodnames(NM_CONFUSING)
令人迷惑的方面命名
42.
Nm:
Fieldnamesshouldstartwithalowercaseletter
(NM_FIELD_NAMING_CONVENTION)
非final类型的字段需要遵循驼峰命名原则
43.
Nm:
UseofidentifierthatisakeywordinlaterversionsofJava
(NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER)
验证是否是java预留关键字
44.
Nm:
UseofidentifierthatisakeywordinlaterversionsofJava
(NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER)
验证是否时java中的关键字
45.
Nm:
Methodnamesshouldstartwithalowercaseletter
(NM_METHOD_NAMING_CONVENTION)
方法名称以小写字母开头
46.
Nm:
Classnamesshouldn'tshadowsimplenameofimplementedinterface
(NM_SAME_SIMPLE_NAME_ASINTERFACE)
实现同一接口实现类不能使用相同的名称,即使它们位于不同的包中
47.
Nm:
Classnamesshouldn'tshadowsimplenameofsuperclass
(nm_same_simple_name_as_superclass)
继承同一父类的子类不能使用相同的名称,即使它们位于不同的包中
48.
Nm:
Veryconfusingmethodnames(butperhapsintentional)(NM_VERY_CONFUSING_INTENTIONAL)
很容易混淆的方法命名,例如方法的名称名称使用使用大小写来区别两个彳、同的方法。
49.
Nm:
Methoddoesn'toverridemethodinsuperclassduetowrongpackageforparameter(NM_WRONG_PACKAGE_INTENTIONAL)
由于错误引用了不同包中相同类名的对象而不能够正确的覆写父类中的方法
importalpha.Foo;
publicclassA{
publicintf(Foox){return17;}
}
importbeta.Foo;
pu