klockwork修改

Posted lihongling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了klockwork修改相关的知识,希望对你有一定的参考价值。

  • kw异常描述 - 01

Tainted data ‘(Double.valueOf(...) / 100)‘ that comes from ‘bufferedReader.readLine()‘ is used in an arithmetic operation and can cause an integer overflow or unexpected result 

 

代码行:

Double samplePercentage = Double.valueOf(samples) * (Double.valueOf(percent) / 100);

 

修改后的代码:

BigDecimal b1 = new BigDecimal(Double.parseDouble(samples));
BigDecimal b2 = new BigDecimal(Double.parseDouble(percent) / 100);
BigDecimal samplePercentage = b1.multiply(b2);

 

修改方法及原因:
float和double是为了科学计算和工程计算而设计的,只是为了广泛的数值范围上提供较为精确的快速近似值计算,不适用于需要提供精确的计算。不需要记录的值为十进制小数点,所涉及的值不太大可用int或long,

需要记录十进制小数点则使用BigDecimal。

 

 

  • kw异常描述 - 02

Sql object ‘statement‘ is not closed on exit. 

 

代码行:

PreparedStatement statement = connection.prepareStatement(sql_snap, PreparedStatement.RETURN_GENERATED_KEYS);

......

 

if(statement!=null){
try{
statement.close();
}catch (Exception e){
LLSysLog.logError("statement Release ERROR",e);
}
}

 

修改后的代码:

PreparedStatement statement =null;
try{
statement = connection.prepareStatement(sql_snap, PreparedStatement.RETURN_GENERATED_KEYS);
......
}finally{
if(statement!=null){
try{
statement.close();
}catch (Exception e){
LLSysLog.logError("statement Release ERROR",e);
}
}
}

 

修改方法及原因:

使用PrepareStatement、ResultSet、InputStream等均需要关闭,因为执行的过程中可能发生异常导致后面的代码没有执行,导致不能关闭,所以需要在finally中关闭,关闭的时候需要去捕获关闭的异常,因为有可能会关闭异常。

 

 

  • kw异常描述 - 03

Null pointer dereference 

 

代码行:

if(map.ger(ip);){

String userName=map.ger(ip);.getUserName();

}

 

修改后的代码:

User user=map.ger(ip);

if(user!=null){

String userName=user.getUserName();

}

 

修改方法及原因:

当从外部传来的一个对象,要使用对象做getset方法时,需先判断对象是否为空。

获取Map里的数据后,且数据为为对象,应先将数据取出来再判断对象是否为空。

因为直接判断,等使用的时候可能值已经改变了

 






















以上是关于klockwork修改的主要内容,如果未能解决你的问题,请参考以下文章

vscode中设置vue代码片段

iOS代码片段CodeSnippets

VIM 代码片段插件 ultisnips 使用教程

创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段

静态代码分析器:非托管C ++ Visual Studio 2008

Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段