Abstract
在使用gofuzz测试的过程中。
遇到明明很有问题、肯定能触发panic的语料,却没有生成对应的crash。
怀疑自己的使用姿势不对,遂对其进行了研究。本文记录一下实验过程和结果。
为了方便测试,设计了自定义Fuzz函数如下:

通过测试panic是否会崩溃,来检查panic和return值之间的相关性。
猜测1: Fuzz函数return值存在特殊含义
为了测试return值对fuzz过程的影响,我删去了panic的设计。
当改变return的返回值时,fuzz的exec(程序执行次数) corpus(进化出的语料) restarts(程序重启次数)发生了如下的变化。
return之间的影响 (无panic)
仅return1
exec+ corpus+ restarts+
仅return 0
exec+ corpus+ restarts+
仅return -1
exec+ corpus1 restarts+
可以看出在gofuzz中,Fuzz函数的return值有特殊的含义。
- return 1 : 表示这次测试的样例是好的,成功的,阳性的。请多多使用这个突变分支的样例来测试。
- return 0 : 表示这次测试样例正常,挺好的。就继续测吧,对后续测试样例的使用没有影响。
- return -1: 表示这次测试使用的样例不给力,成阴性。在以

在GoFuzz测试中,遇到无法触发crash的情况。研究了Fuzz函数return值、panic与return组合、同一block中panic与return的使用,以及panic与Fuzz函数默认return值的影响。结果表明,return值影响fuzz行为,panic后不应有return,Fuzz函数默认返回值必须为1以触发crash。
最低0.47元/天 解锁文章
2291

被折叠的 条评论
为什么被折叠?



