極楽せきゅあブログ

ときどきセキュリティ

Sulleyのメモ

ちょいとメモっとく。
full_rangeが指定されていないデフォルトで、integerの場合、

            # try only "smart" values.
            self.add_integer_boundaries(0)
            self.add_integer_boundaries(self.max_num / 2)
            self.add_integer_boundaries(self.max_num / 3)
            self.add_integer_boundaries(self.max_num / 4)
            self.add_integer_boundaries(self.max_num / 8)
            self.add_integer_boundaries(self.max_num / 16)
            self.add_integer_boundaries(self.max_num / 32)
            self.add_integer_boundaries(self.max_num)
    def add_integer_boundaries (self, integer):
        '''
        Add the supplied integer and border cases to the integer fuzz heuristics library.

        @type  integer: Int
        @param integer: Integer to append to fuzz heuristics
        '''

        for i in xrange(-10, 10):
            case = integer + i

            # ensure the border case falls within the valid range for this field.
            if 0 <= case <= self.max_num:
                if case not in self.fuzz_library:
                    self.fuzz_library.append(case)

こんな風に試す値を生成しています。
xrange(-10,10)ってのは、-10から始めて9までの20個なので、各要素ごとに試される数は20個、ということは8種類で最大160個ってことになりますね。
max_numが十分でかい場合には、/2プラスマイナス10とか/3プラスマイナス10は重複しないので、あり得る数の最大は160のままです。
ただし、appendの最後において
if 0 <= case <= self.max_num:
という条件が付けられていますので、
入力値がゼロの場合、-10に始まる10個は範囲外になります。
また、入力値がmax_numの場合、max_num+1に始まる9個は範囲外になります。
したがって160-19で141になります。