본문 바로가기
프로그래밍/Web.

[JAVA] FindBugs 오류처리

by _Chavi 2020. 3. 30.

출처 : http://findbugs.sourceforge.net/

Eclipse 플러그인인 FindBugs를 이용하여 간단하게 JAVA Secure Coding검사를 진행하였습니다.

그 중 발견했더 오류 몇가지를 기록하려합니다.

버전상의 문제로 FindBugs를 사용하였지만 최신버전 JAVA와 프로젝트에서는 SpotBugs를 사용하시면 더 좋을것같아요.

 

Call to equals() comparing different types

간단하지만 생각보다 많이 검출되는 오류입니다.

//수정전
if(("").equals(value) || value == null ){
//수정후
if(value == null ){

String타입이 아닌 변수를 .equals 메서드를 통하여 비교했기에 발생했던 오류였습니다. 변수의 상태가 제네릭 한 상태일때 주의하면 좋겠습니다.

 

Invocation of toString on an array

자주 등장하지는 않지만 주의하면 좋을것 같습니다.

//수정전
setValue = values.toString();
//수정후
Arrays.toString(values);

String Array를 단순 toString메서드를 호출해서 발생한 오류입니다. 결과는 같지만 혹시모를 오류를 위해 메서드를 사용해주면 좋겠습니다.

 

Comparison of String objects using == or !=

JS에서 사용하던 습관때문에 자주 발생하는 오류입니다.

//수정전
if(value == null || value == ""){
	value = "";
}
//수정후
if(value == null || "".equals(value)){
	value = "";
}

같은 타입의 객체들은 == 연산자가 아닌 equals 메서드를 사용하여 비교하면 좋겠습니다.

 

Call to equals(null)

위의 오류와 비슷하지만 다른상황의 오류입니다.

//수정전
if(paramMap.get("AtypeCheck").equals("") || paramMap.get("AtypeCheck").equals(null)){
	paramMap.put("AtypeCheck", "A1");
}
//수정후
if(paramMap.get("AtypeCheck").equals("") || paramMap.get("AtypeCheck") == null){
	paramMap.put("AtypeCheck", "A1");
}

객체의 null 여부는 == 연산자로 처리해주시면 되겠습니다. 혹은 isNULL 메서드를 구현하시는것도 좋겠습니다.

 

Dead store to local variable

생성한 객체가 사용되지 않았거나, 이미 정적으로 생성되어서 컴파일후에 미사용 처리된 경우에 발생하는 오류입니다.

//1. 수정전(naver used)
List<Map> list = new ArrayList<Map>();
//1. 수정후(naver used)
//List<Map> list = new ArrayList<Map>();
//2. 수정전(static method)
Object obj = new Object();
...
map.put("value", obj.method(value.toString()).toString()));
//2. 수정후(static method)
//Object obj = new Object();
	...
map.put("value", Object.method(value.toString()).toString()));

Object가 새로 생성되던것을 static상태의 메서드를 호출하는 형식으로 변경하였습니다.

간단하지만 자주하는 실수들을 처리하는법을 알아보았습니다.

 

댓글