**环境信息** - APIJSON: d8cfc9e6be87bd6116ecf8a125a52021f0154761 **问题描述** 我们用我们的源伞Pinopint扫描器扫描出一些有趣的报告,可以参考看看是否有修复价值。 **错误信息** [APIJSON项目 - 2018年11月16日10-25-54批次 - 已标注缺陷html报告 - 2018年11月16日10-34-30.pdf](https://github.com/TommyLemon/APIJSON/files/2587785/java_src-2018-11-16-10-25-14.-.2018.11.16.10-25-54.-.html.-.2018.11.16.10-34-30.pdf)
Activity
TommyLemon commentedon Nov 16, 2018
感谢,大概看了下,部分问题已确认确实存在,后续将持续改进。
anonymoustoken commentedon Dec 2, 2018
@mmyjona 您这个 是商业工具吗? 我在网上找了一下 怎么 没有找到呢?
TommyLemon commentedon Dec 2, 2018
@anonymoustoken 同问,我也没找到哈哈
TommyLemon commentedon Dec 2, 2018
总结这个报告:
总共 10617 行代码,16 个「可能」的 bug, 24 个改进建议,
平均每行代码 bug 率低至 0.15%,也就是 (1 - bugs/lines) 高达 99.85% 。
可见 APIJSON 代码非常严谨可靠。
anonymoustoken commentedon Dec 2, 2018
下一个版本说明时候 发布 @TommyLemon
TommyLemon commentedon Dec 3, 2018
@anonymoustoken APIJSON 3.1.5 已发布
https://github.com/TommyLemon/APIJSON/releases/tag/3.1.5
mmyjona commentedon Apr 25, 2019
https://www.sourcebrella.com/pinpoint/
是商业工具哈。
TommyLemon commentedon Jun 1, 2019
确实是误判为 bug 的报告用例 1
src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java: 897 (可信度: 65%)
zuo.biao.apijson.server.AbstractSQLConfig.putWhere(String, Object, boolean)中
AbstractSQLConfig.combine 可能的空指针解引用
对应实际文件
https://github.com/APIJSON/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java
内方法
实际上在前面已经用
combine = getCombine();
做了处理,return 的值不会是 null
确实是误判为 bug 的报告用例 2
src/main/java/zuo/biao/apijson/JSONObject.java: 411 (可信度: 95%)
1 这里比较了 clazz 和 null,说明 clazz 可能为空指针
2 调用 clazz 的 java.lang.Class.getName 方法(使用可疑的空指针)
对应实际文件
https://github.com/APIJSON/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/JSONObject.java
内方法
406 行
Class<?> clazz = value.getClass();
Class 是对象声明后就有的,到执行这行前 value 已经判断过,又不会为 null,
所以实际上 clazz 不会为 null,407 行
if (clazz == null || clazz.getAnnotation(MethodAccess.class) == null) {
中 clazz == null 是一个冗余的判断,后面删掉了,实际上 411 行
clazz.getName()
永远不会因为 clazz == null 而导致 throw NullPointerException,
所以这也是一个误判为 bug 的用例。
确实是误判为 bug 的报告用例 3
严重 空指针解引用 src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java:844 (可信度 50%)
对应实际文件
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java
内方法
843 行已经用 set != null 来判断,而根据 842 行代码,where 为 null 时 set 必定为 null,
永远不会因为 where == null 而导致 throw NullPointerException,
所以这也是一个误判为 bug 的用例。
TommyLemon commentedon Jun 1, 2019
确实是验证为 bug 的报告用例 1
缺陷位置:
src/main/java/zuo/biao/apijson/server/AbstractParser.java: 1077
标注: 确认
时间: 2018-11-16 10:25:54
可信度: 98%
缺陷ID: 551386e3a9a5cb4d8d4f43e32105174e
确实是验证为 bug 的报告用例 2
已在新版通过 Log.DEBUG 判断,false 时不返回数据库对应的 SQLException 真实信息来解决
https://github.com/Tencent/APIJSON/blob/bbcf05e01c724894a5ba0dcddd49a14bbfeb5346/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java
TommyLemon commentedon Jan 23, 2021
已解决
bbcf05e
TommyLemon commentedon Jan 23, 2021
这两个摘要有点奇怪

对应的代码行只是简单的一个 setter 方法给成员变量赋值,并没有加锁,这里也不需要加锁

https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractParser.java
TommyLemon commentedon Jan 23, 2021
这个看起来没必要改


因为写 default 也只是不做任何处理就直接 break
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java
TommyLemon commentedon Jan 23, 2021
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/JSONObject.java
已去除多余的判空

https://github.com/Tencent/APIJSON/blob/bbcf05e01c724894a5ba0dcddd49a14bbfeb5346/APIJSONORM/src/main/java/apijson/JSONObject.java
TommyLemon commentedon Jan 23, 2021
这个没必要改,还是保留判空为好
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/SQL.java
TommyLemon commentedon Jan 23, 2021
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java
已优化
https://github.com/Tencent/APIJSON/blob/bbcf05e01c724894a5ba0dcddd49a14bbfeb5346/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
TommyLemon commentedon Jan 23, 2021
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractObjectParser.java
已优化
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java
TommyLemon commentedon Jan 23, 2021
TODO 待优化
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractParser.java
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java
TODO 待优化
https://github.com/Tencent/APIJSON/blob/d8cfc9e6be87bd6116ecf8a125a52021f0154761/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
Rkyzzy commentedon Apr 22, 2021
你好!请问这两个剩余的TODO修复了吗?我能尝试修复吗,谢谢!
TommyLemon commentedon Apr 22, 2021
还没有哦,可以的,非常感谢👍
使用entrySet迭代器替代keySet迭代器提高效率 APIJSON#48
使用entrySet代替keySet提高效率 APIJSON#48
Merge pull request #224 from Rkyzzy/master