계: Code Quality
코드 품질이 낮으면 예측할 수 없는 동작이 발생합니다. 사용자 입장에서는 사용 편의성이 떨어지는 것으로 나타나는 경우가 많습니다. 공격자에게는 예상치 못한 방법으로 시스템에 부담을 줄 수 있는 기회가 됩니다.
Code Correctness: String Comparison of Float
Abstract
부동 소수점 값을
String
개체와 비교하는 작업은 불안정하므로 수행해서는 안 됩니다.Explanation
부동 소수점 값을
예제 1: 다음 코드는 부동 소수점 변수를
String
개체에 비교하려면 먼저 해당 값을 String
개체로 변경해야 합니다. 일반적으로 Double.toString()
과 같은 함수를 통해 변경합니다. 부동 소수점 변수의 값과 유형에 따라 String
개체로 변환할 때 해당 값은 "NaN", "Infinity", "-Infinity"가 되거나, 0이 포함된 후행 소수점을 일정 수만큼 포함하거나, 지수 필드를 포함할 수 있습니다. 16진수 문자열로 변환하는 경우에도 표현이 매우 달라질 수 있습니다.예제 1: 다음 코드는 부동 소수점 변수를
String
과 비교합니다.
...
int initialNum = 1;
...
String resultString = Double.valueOf(initialNum/10000.0).toString();
if (s.equals("0.0001")){
//do something
...
}
...
References
[1] NUM11-J. Do not compare or inspect the string representation of floating-point values CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.dataflow.java.code_correctness_string_comparison_of_float