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: 表示这次测试使用的样例不给力,成阴性。在以