Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

class DebugDataProvider

public class DebugDataProvider <: FuzzDataProvider

功能:此类继承了 FuzzDataProvider 类型,额外增加了调试信息。

注意:

不支持平台:Windows。

父类型:

func consumeAll()

public override func consumeAll(): Array<UInt8>

功能:将所有数据转换成 UInt8 类型数组。

注意:

不支持平台:Windows。

返回值:

  • Array<UInt8> - UInt8 类型数组。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将所有数据转换成 UInt8 类型数组
    let allData = ddp.consumeAll()
    return 0
}

运行结果:

[DEBUG] consumeAll return [65, 66, 67, 68]

func consumeAllAsAscii()

public override func consumeAllAsAscii(): String

功能:将所有数据转换成 Ascii String 类型。

注意:

不支持平台:Windows。

返回值:

  • String - Ascii String 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" in ASCII
    let ddp = DebugDataProvider.wrap(fdp)
    // 将所有数据转换成 Ascii String 类型
    let asciiStr = ddp.consumeAllAsAscii()
    return 0
}

运行结果:

[DEBUG] consumeAllAsAscii return Hello

func consumeAllAsString()

public override func consumeAllAsString(): String

功能:将所有数据转换成 utf8 String 类型。

注意:

不支持平台:Windows。

返回值:

  • String - utf8 String 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" in ASCII
    let ddp = DebugDataProvider.wrap(fdp)
    // 将所有数据转换成 utf8 String 类型
    let utf8Str = ddp.consumeAllAsString()
    return 0
}

运行结果:

[DEBUG] consumeAllAsString return Hello

func consumeAsciiString(Int64)

public override func consumeAsciiString(maxLength: Int64): String

功能:将数据转换成 Ascii String 类型实例。

注意:

不支持平台:Windows。

参数:

  • maxLength: Int64 - String 类型的最大长度。

返回值:

  • String - String 类型实例。

异常:

  • IllegalArgumentException - 如果 maxLength 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" in ASCII
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Ascii String 类型实例,最大长度为3
    let asciiStr = ddp.consumeAsciiString(3)
    return 0
}

运行结果:

[DEBUG] consumeAsciiString return Hel

func consumeBool()

public override func consumeBool(): Bool

功能:将数据转换成 Bool 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Bool - Bool 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Bool 类型实例
    let boolVal = ddp.consumeBool()
    return 0
}

运行结果:

[DEBUG] consumeBool return true

func consumeBools(Int64)

public override func consumeBools(count: Int64): Array<Bool>

功能:将指定数量的数据转换成 Bool 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Bool> - Bool 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 Bool 类型数组
    let bools = ddp.consumeBools(3)
    return 0
}

运行结果:

[DEBUG] consumeBools return [true, false, true]

func consumeByte()

public override func consumeByte(): Byte

功能:将数据转换成 Byte 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Byte - Byte 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Byte 类型实例
    let byteVal = ddp.consumeByte()
    return 0
}

运行结果:

[DEBUG] consumeByte return 65

func consumeBytes(Int64)

public override func consumeBytes(count: Int64): Array<Byte>

功能:将指定数量的数据转换成 Byte 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Byte> - Byte 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 Byte 类型数组
    let bytes = ddp.consumeBytes(2)
    return 0
}

运行结果:

[DEBUG] consumeBytes return [65, 66]

func consumeFloat32()

public override func consumeFloat32(): Float32

功能:将数据转换成 Float32 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Float32 - Float32 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Float32 类型实例
    let float32Val = ddp.consumeFloat32()
    return 0
}

运行结果:

[DEBUG] consumeFloat32 return 781.035217

func consumeFloat64()

public override func consumeFloat64(): Float64

功能:将数据转换成 Float64 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Float64 - Float64 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Float64 类型实例
    let float64Val = ddp.consumeFloat64()
    return 0
}

运行结果:

[DEBUG] consumeFloat64 return 15839800103804824402926068484019465486336.000000

func consumeInt16()

public override func consumeInt16(): Int16

功能:将数据转换成 Int16 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int16 - Int16 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Int16 类型实例
    let int16Val = ddp.consumeInt16()
    return 0
}

运行结果:

[DEBUG] consumeInt16 return 16961

func consumeInt16s(Int64)

public override func consumeInt16s(count: Int64): Array<Int16>

功能:将指定数量的数据转换成 Int16 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int16> - Int16 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 Int16 类型数组
    let int16s = ddp.consumeInt16s(2)
    return 0
}

运行结果:

[DEBUG] consumeInt16s return [16961, 17475]

func consumeInt32()

public override func consumeInt32(): Int32

功能:将数据转换成 Int32 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int32 - Int32 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Int32 类型实例
    let int32Val = ddp.consumeInt32()
    return 0
}

运行结果:

[DEBUG] consumeInt32 return 1145258561

func consumeInt32s(Int64)

public override func consumeInt32s(count: Int64): Array<Int32>

功能:将指定数量的数据转换成 Int32 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int32> - Int32 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72, 73, 74])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 Int32 类型数组
    let int32s = ddp.consumeInt32s(2)
    return 0
}

运行结果:

[DEBUG] consumeInt32s return [1145258561, 1212630597]

func consumeInt64()

public override func consumeInt64(): Int64

功能:将数据转换成 Int64 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int64 - Int64 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 65, 66, 67, 68])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Int64 类型实例
    let int64Val = ddp.consumeInt64()
    return 0
}

运行结果:

[DEBUG] consumeInt64 return 4918848066104279617

func consumeInt64s(Int64)

public override func consumeInt64s(count: Int64): Array<Int64>

功能:将指定数量的数据转换成 Int64 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int64> - Int64 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 Int64 类型数组
    let int64s = ddp.consumeInt64s(2)
    return 0
}

运行结果:

[DEBUG] consumeInt64s return [4918848066104279617, 4918848066104279617]

func consumeInt8()

public override func consumeInt8(): Int8

功能:将数据转换成 Int8 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int8 - Int8 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Int8 类型实例
    let int8Val = ddp.consumeInt8()
    return 0
}

运行结果:

[DEBUG] consumeInt8 return 65

func consumeInt8s(Int64)

public override func consumeInt8s(count: Int64): Array<Int8>

功能:将指定数量的数据转换成 Int8 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int8> - Int8 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 Int8 类型数组
    let int8s = ddp.consumeInt8s(2)
    return 0
}

运行结果:

[DEBUG] consumeInt8s return [65, 66]

func consumeRune()

public override func consumeRune(): Rune

功能:将数据转换成 Rune 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Rune - Rune 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" string
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 Rune 类型实例
    let runeVal = ddp.consumeRune()
    return 0
}

运行结果:

[DEBUG] consumeRune return 󆕈

func consumeString(Int64)

public override func consumeString(maxLength: Int64): String

功能:将数据转换成 utf8 String 类型实例。

注意:

不支持平台:Windows。

参数:

  • maxLength: Int64 - String 类型的最大长度。

返回值:

  • String - String 类型实例。

异常:

  • IllegalArgumentException - 如果 maxLength 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([228, 189, 160, 229, 165, 189]) // "你好" string
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定长度的数据转换成 String 类型实例
    let str = ddp.consumeString(1)
    return 0
}

运行结果:

[DEBUG] consumeString return 你

func consumeUInt16()

public override func consumeUInt16(): UInt16

功能:将数据转换成 UInt16 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt16 - UInt16 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 UInt16 类型实例
    let uint16Val = ddp.consumeUInt16()
    return 0
}

运行结果:

[DEBUG] consumeUInt16 return 16961

func consumeUInt16s(Int64)

public override func consumeUInt16s(count: Int64): Array<UInt16>

功能:将指定数量的数据转换成 UInt16 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt16> - UInt16 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 UInt16 类型数组
    let uint16s = ddp.consumeUInt16s(2)
    return 0
}

运行结果:

[DEBUG] consumeUInt16s return [16961, 17475]

func consumeUInt32()

public override func consumeUInt32(): UInt32

功能:将数据转换成 UInt32 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt32 - UInt32 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 UInt32 类型实例
    let uint32Val = ddp.consumeUInt32()
    return 0
}

运行结果:

[DEBUG] consumeUInt32 return 1145258561

func consumeUInt32s(Int64)

public override func consumeUInt32s(count: Int64): Array<UInt32>

功能:将指定数量的数据转换成 UInt32 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt32> - UInt32 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 UInt32 类型数组
    let uint32s = ddp.consumeUInt32s(2)
    return 0
}

运行结果:

[DEBUG] consumeUInt32s return [1145258561, 1212630597]

func consumeUInt64()

public override func consumeUInt64(): UInt64

功能:将数据转换成 UInt64 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt64 - UInt64 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 UInt64 类型实例
    let uint64Val = ddp.consumeUInt64()
    return 0
}

运行结果:

[DEBUG] consumeUInt64 return 5208208757389214273

func consumeUInt64s(Int64)

public override func consumeUInt64s(count: Int64): Array<UInt64>

功能:将指定数量的数据转换成 UInt64 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt64> - UInt64 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 UInt64 类型数组
    let uint64s = ddp.consumeUInt64s(2)
    return 0
}

运行结果:

[DEBUG] consumeUInt64s return [5208208757389214273, 5786930140093827657]

func consumeUInt8()

public override func consumeUInt8(): UInt8

功能:将数据转换成 UInt8 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt8 - UInt8 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将数据转换成 UInt8 类型实例
    let uint8Val = ddp.consumeUInt8()
    return 0
}

运行结果:

[DEBUG] consumeUInt8 return 65

func consumeUInt8s(Int64)

public override func consumeUInt8s(count: Int64): Array<UInt8>

功能:将指定数量的数据转换成 UInt8 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt8> - UInt8 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 UInt8 类型数组
    let uint8s = ddp.consumeUInt8s(2)
    return 0
}

运行结果:

[DEBUG] consumeUInt8s return [65, 66]

func wrap(FuzzDataProvider)

public static func wrap(dp: FuzzDataProvider): DebugDataProvider

功能:根据 FuzzDataProvider 实例创建 DebugDataProvider 实例。

注意:

不支持平台:Windows。

参数:

返回值:

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])

    // 通过FuzzDataProvider创建DebugDataProvider
    let ddp = DebugDataProvider.wrap(fdp)
    // 将指定数量的数据转换成 UInt8 类型数组
    let uint8s = ddp.consumeUInt8s(2)
    return 0
}

运行结果:

[DEBUG] consumeUInt8s return [65, 66]

class FuzzDataProvider

public open class FuzzDataProvider {
    public let data: Array<UInt8>
    public var remainingBytes: Int64
    public var offset: Int64
}

功能:FuzzDataProvider 是一个工具类,目的是将变异数据的字节流转化为标准的仓颉基本数据。

注意:

不支持平台:Windows。

当前支持的数据结构如下:

目标类型API说明
BoolconsumeBool()获取 1 个 Bool,变异数据长度不足时,抛出 ExhaustedException
Array<Bool>consumeBools(count: Int64)获取 N 个 Bool,变异数据长度不足时,抛出 ExhaustedException
ByteconsumeByte()获取 1 个 Byte,变异数据长度不足时,抛出 ExhaustedException
Array<Byte>consumeBytes(count: Int64)获取 N 个 Byte,变异数据长度不足时,抛出 ExhaustedException
UInt8consumeUInt8()获取 1 个 UInt8,变异数据长度不足时,抛出 ExhaustedException
UInt16consumeUInt16()获取 1 个 UInt16,变异数据长度不足时,抛出 ExhaustedException
UInt32consumeUInt32()获取 1 个 UInt32,变异数据长度不足时,抛出 ExhaustedException
UInt64consumeUInt64()获取 1 个 UInt64,变异数据长度不足时,抛出 ExhaustedException
Int8consumeInt8()获取 1 个 Int8,变异数据长度不足时,抛出 ExhaustedException
Int16consumeInt16()获取 1 个 Int16,变异数据长度不足时,抛出 ExhaustedException
Int32consumeInt32()获取 1 个 Int32,变异数据长度不足时,抛出 ExhaustedException
Int64consumeInt64()获取 1 个 Int64,变异数据长度不足时,抛出 ExhaustedException
Float32consumeFloat32()获取 1 个 Float32,变异数据长度不足时,抛出 ExhaustedException
Float64consumeFloat64()获取 1 个 Float64,变异数据长度不足时,抛出 ExhaustedException
Array<UInt8>consumeUInt8s(count: Int64)获取 N 个 UInt8,变异数据长度不足时,抛出 ExhaustedException
Array<UInt16>consumeUInt16s(count: Int64)获取 N 个 UInt16,变异数据长度不足时,抛出 ExhaustedException
Array<UInt32>consumeUInt32s(count: Int64)获取 N 个 UInt32,变异数据长度不足时,抛出 ExhaustedException
Array<UInt64>consumeUInt64s(count: Int64)获取 N 个 UInt64,变异数据长度不足时,抛出 ExhaustedException
Array<Int8>consumeInt8s(count: Int64)获取 N 个 Int8,变异数据长度不足时,抛出 ExhaustedException
Array<Int16>consumeInt16s(count: Int64)获取 N 个 Int16,变异数据长度不足时,抛出 ExhaustedException
Array<Int32>consumeInt32s(count: Int64)获取 N 个 Int32,变异数据长度不足时,抛出 ExhaustedException
Array<Int64>consumeInt64s(count: Int64)获取 N 个 Int64,变异数据长度不足时,抛出 ExhaustedException
RuneconsumeRune()获取 1 个 Rune,变异数据长度不足时,抛出 ExhaustedException
StringconsumeAsciiString(maxLength: Int64)获取 1 个纯 ASCII 的 String,长度为 0 到 maxLength,可以为 0。
StringconsumeString(maxLength: Int64)获取 1 个 UTF8 String,长度为 0 到 maxLength,可以为 0。
Array<UInt8>consumeAll()FuzzDataProvider 中的剩余内容全部转化为字节数组。
StringconsumeAllAsAscii()FuzzDataProvider 中的剩余内容全部转化为纯 ASCII 的 String。
StringconsumeAllAsString()FuzzDataProvider 中的剩余内容全部转化为 UTF8 String,末尾多余的字符不会被消耗。

在数据长度不足时,调用上述大部分虽然会抛出 ExhaustedException,但编写 fuzz 函数时通常并不需要对它进行处理,ExhaustedException 默认会被 fuzz 框架捕获,告诉 libfuzzer 该次运行无效,请继续下一轮变异。随着执行时间的变长,变异数据也会逐渐变长,直到满足 FuzzDataProvider 的需求。

如果达到了 max_len 仍无法满足 FuzzDataProvider 的需求,则进程退出,请修改 fuzz 测试用例(推荐) 或 增大 max_len(不推荐)。

let data

public let data: Array<UInt8>

功能:变异数据。

注意:

不支持平台:Windows。

类型:Array<UInt8>

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let inputData: Array<UInt8> = [65, 66, 67]
    // 使用withCangjieData创建FuzzDataProvider实例
    let fdp = FuzzDataProvider.withCangjieData(inputData)
    println("数据: ${fdp.data}")
    return 0
}

运行结果:

数据: [65, 66, 67]

var offset

public var offset: Int64

功能:已转化的字节数。

注意:

不支持平台:Windows。

类型:Int64

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    // 访问offset属性
    println("当前消耗量: ${fdp.offset}")
    // 消费一些数据后再次查看offset
    let _ = fdp.consumeByte()
    let _ = fdp.consumeByte()
    let _ = fdp.consumeByte()
    println("消费数据后: ${fdp.offset}")
    return 0
}

运行结果:

当前消耗量: 0
消费数据后: 3

var remainingBytes

public var remainingBytes: Int64

功能:剩余字节数。

注意:

不支持平台:Windows。

类型:Int64

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    // 访问remainingBytes属性
    println("当前剩余量: ${fdp.remainingBytes}")
    // 消费一些数据后再次查看remainingBytes
    let _ = fdp.consumeByte()
    let _ = fdp.consumeByte()
    let _ = fdp.consumeByte()
    println("消费数据后: ${fdp.remainingBytes}")
    return 0
}

运行结果:

当前剩余量: 8
消费数据后: 5

static func withCangjieData(Array<UInt8>)

public static func withCangjieData(data: Array<UInt8>): FuzzDataProvider

功能:使用 Array<UInt8> 类型的数据生成 FuzzDataProvider 类型实例。

注意:

不支持平台:Windows。

参数:

  • data: Array<UInt8> - 输入的外部数据。

返回值:

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let inputData: Array<UInt8> = [65, 66, 67, 68, 69, 70]
    // 使用withCangjieData创建FuzzDataProvider实例
    let fdp = FuzzDataProvider.withCangjieData(inputData)
    println("FuzzDataProvider创建成功,数据长度: ${fdp.data.size}")
    return 0
}

运行结果:

FuzzDataProvider创建成功,数据长度: 6

static func withNativeData(CPointer<UInt8>, Int64)

public static unsafe func withNativeData(data: CPointer<UInt8>, length: Int64): FuzzDataProvider

功能:使用 C 指针数据生成 FuzzDataProvider 类型实例。

注意:

不支持平台:Windows。

参数:

  • data: CPointer<UInt8> - 输入的外部数据。
  • length: Int64 - 数据长度。

返回值:

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let arr: Array<UInt8> = [65, 66, 67, 68]
    // 获取CPointerHandle
    let cptrHandle: CPointerHandle<UInt8> = unsafe { acquireArrayRawData(arr) }
    // 获取pointer
    let cptr: CPointer<UInt8> = cptrHandle.pointer

    // 模拟外部数据指针创建FuzzDataProvider实例
    let fdp = unsafe { FuzzDataProvider.withNativeData(cptr, arr.size) }
    println("数据: ${fdp.data}")

    // 释放CPointerHandle
    unsafe { releaseArrayRawData<UInt8>(cptrHandle) }
    return 0
}

运行结果:

数据: [65, 66, 67, 68]

func consumeAll()

public open func consumeAll(): Array<UInt8>

功能:将所有数据转换成 UInt8 类型数组。

注意:

不支持平台:Windows。

返回值:

  • Array<UInt8> - UInt8 类型数组。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    // 将所有数据转换成 UInt8 类型数组
    let allData = fdp.consumeAll()
    println("转换后的UInt8数组: ${allData}")
    return 0
}

运行结果:

转换后的UInt8数组: [65, 66, 67, 68]

func consumeAllAsAscii()

public open func consumeAllAsAscii(): String

功能:将所有数据转换成 Ascii String 类型。

注意:

不支持平台:Windows。

返回值:

  • String - Ascii String 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" in ASCII

    // 将所有数据转换成 Ascii String 类型
    let asciiStr = fdp.consumeAllAsAscii()
    println("转换后的Ascii字符串: ${asciiStr}")
    return 0
}

运行结果:

转换后的Ascii字符串: Hello

func consumeAllAsString()

public open func consumeAllAsString(): String

功能:将所有数据转换成 utf8 String 类型。

注意:

不支持平台:Windows。

返回值:

  • String - utf8 String 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" in ASCII

    // 将所有数据转换成 utf8 String 类型
    let utf8Str = fdp.consumeAllAsString()
    println("转换后的utf8字符串: ${utf8Str}")
    return 0
}

运行结果:

转换后的utf8字符串: Hello

func consumeAsciiString(Int64)

public open func consumeAsciiString(maxLength: Int64): String

功能:将数据转换成 Ascii String 类型实例。

注意:

不支持平台:Windows。

参数:

  • maxLength: Int64 - String 类型的最大长度。

返回值:

  • String - String 类型实例。

异常:

  • IllegalArgumentException - 如果 maxLength 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" in ASCII

    // 将数据转换成 Ascii String 类型实例,最大长度为3
    let asciiStr = fdp.consumeAsciiString(3)
    println("转换后的Ascii字符串: ${asciiStr}")
    return 0
}

运行结果:

转换后的Ascii字符串: Hel

func consumeBool()

public open func consumeBool(): Bool

功能:将数据转换成 Bool 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Bool - Bool 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65])
    // 将数据转换成 Bool 类型实例
    let boolVal = fdp.consumeBool()
    println("转换后的Bool值: ${boolVal}")
    return 0
}

运行结果:

转换后的Bool值: true

func consumeBools(Int64)

public open func consumeBools(count: Int64): Array<Bool>

功能:将指定数量的数据转换成 Bool 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Bool> - Bool 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    // 将指定数量的数据转换成 Bool 类型数组
    let bools = fdp.consumeBools(3)
    println("转换后的Bool数组: ${bools}")
    return 0
}

运行结果:

转换后的Bool数组: [true, false, true]

func consumeByte()

public open func consumeByte(): Byte

功能:将数据转换成 Byte 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Byte - Byte 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66])
    // 将数据转换成 Byte 类型实例
    let byteVal = fdp.consumeByte()
    println("转换后的Byte值: ${byteVal}")
    return 0
}

运行结果:

转换后的Byte值: 65

func consumeBytes(Int64)

public open func consumeBytes(count: Int64): Array<Byte>

功能:将指定数量的数据转换成 Byte 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Byte> - Byte 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    // 将指定数量的数据转换成 Byte 类型数组
    let bytes = fdp.consumeBytes(2)
    println("转换后的Byte数组: ${bytes}")
    return 0
}

运行结果:

转换后的Byte数组: [65, 66]

func consumeFloat32()

public open func consumeFloat32(): Float32

功能:将数据转换成 Float32 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Float32 - Float32 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    // 将数据转换成 Float32 类型实例
    let float32Val = fdp.consumeFloat32()
    println("转换后的Float32值: ${float32Val}")
    return 0
}

运行结果:

转换后的Float32值: 781.035217

func consumeFloat64()

public open func consumeFloat64(): Float64

功能:将数据转换成 Float64 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Float64 - Float64 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    // 将数据转换成 Float64 类型实例
    let float64Val = fdp.consumeFloat64()
    println("转换后的Float64值: ${float64Val}")
    return 0
}

运行结果:

转换后的Float64值: 15839800103804824402926068484019465486336.000000

func consumeInt16()

public open func consumeInt16(): Int16

功能:将数据转换成 Int16 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int16 - Int16 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66])
    // 将数据转换成 Int16 类型实例
    let int16Val = fdp.consumeInt16()
    println("转换后的Int16值: ${int16Val}")
    return 0
}

运行结果:

转换后的Int16值: 16961

func consumeInt16s(Int64)

public open func consumeInt16s(count: Int64): Array<Int16>

功能:将指定数量的数据转换成 Int16 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int16> - Int16 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70])
    // 将指定数量的数据转换成 Int16 类型数组
    let int16s = fdp.consumeInt16s(2)
    println("Int16数组: ${int16s}")
    return 0
}

运行结果:

Int16数组: [16961, 17475]

func consumeInt32()

public open func consumeInt32(): Int32

功能:将数据转换成 Int32 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int32 - Int32 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    // 将数据转换成 Int32 类型实例
    let int32Val = fdp.consumeInt32()
    println("转换后的Int32值: ${int32Val}")
    return 0
}

运行结果:

转换后的Int32值: 1145258561

func consumeInt32s(Int64)

public open func consumeInt32s(count: Int64): Array<Int32>

功能:将指定数量的数据转换成 Int32 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int32> - Int32 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72, 73, 74])
    // 将指定数量的数据转换成 Int32 类型数组
    let int32s = fdp.consumeInt32s(2)
    println("转换后的Int32数组: ${int32s}")
    return 0
}

运行结果:

转换后的Int32数组: [1145258561, 1212630597]

func consumeInt64()

public open func consumeInt64(): Int64

功能:将数据转换成 Int64 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int64 - Int64 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 65, 66, 67, 68])
    // 将数据转换成 Int64 类型实例
    let int64Val = fdp.consumeInt64()
    println("转换后的Int64值: ${int64Val}")
    return 0
}

运行结果:

转换后的Int64值: 4918848066104279617

func consumeInt64s(Int64)

public open func consumeInt64s(count: Int64): Array<Int64>

功能:将指定数量的数据转换成 Int64 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int64> - Int64 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68])
    // 将指定数量的数据转换成 Int64 类型数组
    let int64s = fdp.consumeInt64s(2)
    println("转换后的Int64数组: ${int64s}")
    return 0
}

运行结果:

转换后的Int64数组: [4918848066104279617, 4918848066104279617]

func consumeInt8()

public open func consumeInt8(): Int8

功能:将数据转换成 Int8 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Int8 - Int8 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65])
    // 将数据转换成 Int8 类型实例
    let int8Val = fdp.consumeInt8()
    println("转换后的Int8值: ${int8Val}")
    return 0
}

运行结果:

转换后的Int8值: 65

func consumeInt8s(Int64)

public open func consumeInt8s(count: Int64): Array<Int8>

功能:将指定数量的数据转换成 Int8 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<Int8> - Int8 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    // 将指定数量的数据转换成 Int8 类型数组
    let int8s = fdp.consumeInt8s(2)
    println("转换后的Int8数组: ${int8s}")
    return 0
}

运行结果:

转换后的Int8数组: [65, 66]

func consumeRune()

public open func consumeRune(): Rune

功能:将数据转换成 Rune 类型实例。

注意:

不支持平台:Windows。

返回值:

  • Rune - Rune 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([72, 101, 108, 108, 111]) // "Hello" string

    // 将数据转换成 Rune 类型实例
    let runeVal = fdp.consumeRune()
    println("转换后的Rune值: ${runeVal}")
    return 0
}

运行结果:

转换后的Rune值: 󆕈

func consumeString(Int64)

public open func consumeString(maxLength: Int64): String

功能:将数据转换成 utf8 String 类型实例。

注意:

不支持平台:Windows。

参数:

  • maxLength: Int64 - String 类型的最大长度。

返回值:

  • String - String 类型实例。

异常:

  • IllegalArgumentException - 如果 maxLength 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([228, 189, 160, 229, 165, 189]) // "你好" string

    // 将指定长度的数据转换成 String 类型实例
    let str = fdp.consumeString(1)
    println("转换后的String值: ${str}")
    return 0
}

运行结果:

转换后的String值: 你

func consumeUInt16()

public open func consumeUInt16(): UInt16

功能:将数据转换成 UInt16 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt16 - UInt16 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66])
    // 将数据转换成 UInt16 类型实例
    let uint16Val = fdp.consumeUInt16()
    println("转换后的UInt16值: ${uint16Val}")
    return 0
}

运行结果:

转换后的UInt16值: 16961

func consumeUInt16s(Int64)

public open func consumeUInt16s(count: Int64): Array<UInt16>

功能:将指定数量的数据转换成 UInt16 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt16> - UInt16 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    // 将指定数量的数据转换成 UInt16 类型数组
    let uint16s = fdp.consumeUInt16s(2)
    println("转换后的UInt16数组: ${uint16s}")
    return 0
}

运行结果:

转换后的UInt16数组: [16961, 17475]

func consumeUInt32()

public open func consumeUInt32(): UInt32

功能:将数据转换成 UInt32 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt32 - UInt32 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68])
    // 将数据转换成 UInt32 类型实例
    let uint32Val = fdp.consumeUInt32()
    println("转换后的UInt32值: ${uint32Val}")
    return 0
}

运行结果:

转换后的UInt32值: 1145258561

func consumeUInt32s(Int64)

public open func consumeUInt32s(count: Int64): Array<UInt32>

功能:将指定数量的数据转换成 UInt32 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt32> - UInt32 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    // 将指定数量的数据转换成 UInt32 类型数组
    let uint32s = fdp.consumeUInt32s(2)
    println("转换后的UInt32数组: ${uint32s}")
    return 0
}

运行结果:

转换后的UInt32数组: [1145258561, 1212630597]

func consumeUInt64()

public open func consumeUInt64(): UInt64

功能:将数据转换成 UInt64 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt64 - UInt64 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72])
    // 将数据转换成 UInt64 类型实例
    let uint64Val = fdp.consumeUInt64()
    println("转换后的UInt64值: ${uint64Val}")
    return 0
}

运行结果:

转换后的UInt64值: 5208208757389214273

func consumeUInt64s(Int64)

public open func consumeUInt64s(count: Int64): Array<UInt64>

功能:将指定数量的数据转换成 UInt64 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt64> - UInt64 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80])
    // 将指定数量的数据转换成 UInt64 类型数组
    let uint64s = fdp.consumeUInt64s(2)
    println("转换后的UInt64数组: ${uint64s}")
    return 0
}

运行结果:

转换后的UInt64数组: [5208208757389214273, 5786930140093827657]

func consumeUInt8()

public open func consumeUInt8(): UInt8

功能:将数据转换成 UInt8 类型实例。

注意:

不支持平台:Windows。

返回值:

  • UInt8 - UInt8 类型实例。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65])
    // 将数据转换成 UInt8 类型实例
    let uint8Val = fdp.consumeUInt8()
    println("转换后的UInt8值: ${uint8Val}")
    return 0
}

运行结果:

转换后的UInt8值: 65

func consumeUInt8s(Int64)

public open func consumeUInt8s(count: Int64): Array<UInt8>

功能:将指定数量的数据转换成 UInt8 类型数组。

注意:

不支持平台:Windows。

参数:

  • count: Int64 - 指定转换的数据量。

返回值:

  • Array<UInt8> - UInt8 类型数组。

异常:

  • IllegalArgumentException - 如果 count 为负数,则抛出异常。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 通过手动传入数据创建FuzzDataProvider(真实模糊测试自动、持续生成海量随机初始数据)
    let fdp = FuzzDataProvider.withCangjieData([65, 66, 67])
    // 将指定数量的数据转换成 UInt8 类型数组
    let uint8s = fdp.consumeUInt8s(2)
    println("转换后的UInt8数组: ${uint8s}")
    return 0
}

运行结果:

转换后的UInt8数组: [65, 66]

class Fuzzer

public class Fuzzer {
    public init(targetFunction: (Array<UInt8>) -> Int32)
    public init(targetFunction: (Array<UInt8>) -> Int32, args: Array<String>)
    public init(targetFunction: (FuzzDataProvider) -> Int32)
    public init(targetFunction: (FuzzDataProvider) -> Int32, args: Array<String>)
}

功能:Fuzzer 类提供了 fuzz 工具的创建。用户提供需要进行 fuzz 测试的函数 targetFunction,以及设置特定的 fuzz 运行参数 args 比如 fuzz 执行次数、初始种子、生成数据最大长度等,可创建相应类型的 Fuzzer

注意:

不支持平台:Windows。

init((Array<UInt8>) -> Int32)

public init(targetFunction: (Array<UInt8>) -> Int32)

功能:根据以 UInt8 数组为参数,以 Int32 为返回值的目标函数,创建 Fuzzer 实例。

注意:

不支持平台:Windows。

参数:

  • targetFunction: (Array<UInt8>) ->Int32 - 以 UInt8 数组为参数,以 Int32 为返回值的目标函数。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

// 被测函数,在满足特定条件会抛出异常,该异常会被 Fuzzer 捕获
public func testApi(data: Array<UInt8>): Int32 {
    if (data.size == 8 && data[0] == b'C' && data[1] == b'a' && data[2] == b'n' && data[3] == b'g' && data[4] == b'j' &&
        data[5] == b'i' && data[6] == b'e' && data[7] == b'!') {
        throw Exception("TRAP")
    }
    return 0
}

init((Array<UInt8>) -> Int32, Array<String>)

public init(targetFunction: (Array<UInt8>) -> Int32, args: Array<String>)

功能:根据以 UInt8 数组为参数,以 Int32 为返回值的目标函数,以及 Fuzz 运行参数,创建 Fuzzer 实例。

注意:

不支持平台:Windows。

参数:

  • targetFunction: (Array<UInt8>) ->Int32 - 以 UInt8 数组为参数,以 Int32 为返回值的目标函数。
  • args: Array<String> - Fuzz 运行参数。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 此示例因为有运行参数的原因而输出帮助信息
    let fuzzer = Fuzzer(testApi, ["-help=1"])
    fuzzer.startFuzz()
    return 0
}

public func testApi(data: Array<UInt8>): Int32 {
    throw Exception("TRAP")
    return 0
}

init((FuzzDataProvider) -> Int32)

public init(targetFunction: (FuzzDataProvider) -> Int32)

功能:根据以 FuzzDataProvider 为参数,以 Int32 为返回值的目标函数,创建 Fuzzer 实例。

注意:

不支持平台:Windows。

参数:

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

public func testApi(dp: FuzzDataProvider): Int32 {
    if (dp.consumeBool() && dp.consumeByte() == b'A' && dp.consumeUInt32() == 0xdeadbeef) {
        throw Exception("TRAP")
    }
    return 0
}

init((FuzzDataProvider) -> Int32, Array<String>)

public init(targetFunction: (FuzzDataProvider) -> Int32, args: Array<String>)

功能:根据以 FuzzDataProvider 为参数,以 Int32 为返回值的目标函数,以及 Fuzz 运行参数,创建 Fuzzer 实例。

注意:

不支持平台:Windows。

参数:

  • targetFunction: (FuzzDataProvider) ->Int32 - 以 FuzzDataProvider 为参数,以 Int32 为返回值的目标函数。
  • args: Array<String> - Fuzz 运行参数。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 此示例因为有运行参数的原因而输出帮助信息
    let fuzzer = Fuzzer(testApi, ["-help=1"])
    fuzzer.startFuzz()
    return 0
}

public func testApi(dp: FuzzDataProvider): Int32 {
    throw Exception("TRAP")
    return 0
}

func disableDebugDataProvider()

public func disableDebugDataProvider(): Unit

功能:关闭调试信息打印功能,当 FuzzDataProvider.consumeXXX 被调用时,返回值将不被打印到 stdout

注意:

不支持平台:Windows。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 关闭调试信息打印功能
    fuzzer.disableDebugDataProvider()

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

public func testApi(dp: FuzzDataProvider): Int32 {
    if (dp.consumeBool() && dp.consumeByte() == b'A' && dp.consumeUInt32() == 0xdeadbeef) {
        throw Exception("TRAP")
    }
    return 0
}

func disableFakeCoverage()

public func disableFakeCoverage(): Unit

功能:关闭调用 enableFakeCoverage 对 Fuzz 的影响。

注意:

不支持平台:Windows。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 关闭调用 `enableFakeCoverage` 对 Fuzz 的影响
    fuzzer.disableFakeCoverage()

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

public func testApi(dp: FuzzDataProvider): Int32 {
    if (dp.consumeBool() && dp.consumeByte() == b'A' && dp.consumeUInt32() == 0xdeadbeef) {
        throw Exception("TRAP")
    }
    return 0
}

func enableDebugDataProvider()

public func enableDebugDataProvider(): Unit

功能:启用调试信息打印功能,当 FuzzDataProvider.consumeXXX 被调用时,返回值将被打印到 stdout。该功能默认为关闭。

注意:

不支持平台:Windows。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 启用调试信息打印功能
    fuzzer.enableDebugDataProvider()

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

public func testApi(dp: FuzzDataProvider): Int32 {
    if (dp.consumeBool() && dp.consumeByte() == b'A' && dp.consumeUInt32() == 0xdeadbeef) {
        throw Exception("TRAP")
    }
    return 0
}

func enableFakeCoverage()

public func enableFakeCoverage(): Unit

功能:创建一块虚假的覆盖率反馈区域,保持 Fuzz 持续进行。在 FuzzDataProvider 模式下,前几轮运行时可能由于数据不足而导致没有覆盖率,libfuzzer 会退出。该功能默认为关闭。

注意:

不支持平台:Windows。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    fuzzer.enableFakeCoverage()

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

public func testApi(dp: FuzzDataProvider): Int32 {
    if (dp.consumeBool() && dp.consumeByte() == b'A' && dp.consumeUInt32() == 0xdeadbeef) {
        throw Exception("TRAP")
    }
    return 0
}

func getArgs()

public func getArgs(): Array<String>

功能:获取 Fuzz 运行参数。

注意:

不支持平台:Windows。

返回值:

  • Array<String> - 当前 Fuzz 运行参数。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建有运行参数的Fuzzer
    let fuzzer = Fuzzer(testApi, ["-help=1"])

    // 获取运行参数
    let args = fuzzer.getArgs()

    println("运行参数: ${args}")
    return 0
}

public func testApi(data: Array<UInt8>): Int32 {
    throw Exception("TRAP")
    return 0
}

运行结果:

运行参数: [-help=1]

func setArgs(Array<String>)

public func setArgs(args: Array<String>): Unit

功能:设置 Fuzz 运行参数。

注意:

不支持平台:Windows。

参数:

  • args: Array<String> - Fuzz 运行参数。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 设置运行参数
    fuzzer.setArgs(["-help=1"])

    // 获取运行参数
    let args = fuzzer.getArgs()

    println("运行参数: ${args}")
    return 0
}

public func testApi(data: Array<UInt8>): Int32 {
    throw Exception("TRAP")
    return 0
}

运行结果:

运行参数: [-help=1]

func setTargetFunction((Array<UInt8>) -> Int32)

public func setTargetFunction(targetFunction: (Array<UInt8>) -> Int32): Unit

功能:设置 Fuzz 目标函数。

注意:

不支持平台:Windows。

参数:

  • targetFunction: (Array<UInt8>) ->Int32 - 以 UInt8 数组为参数,以 Int32 为返回值的目标函数。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 设置被测函数,原本的 testApi 函数将被 testApi1 替代
    fuzzer.setTargetFunction(testApi1)

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

// 被测函数,在满足特定条件会抛出异常,该异常会被 Fuzzer 捕获
public func testApi(dp: FuzzDataProvider): Int32 {
    if (dp.consumeBool() && dp.consumeByte() == b'A' && dp.consumeUInt32() == 0xdeadbeef) {
        throw Exception("TRAP")
    }
    return 0
}

// 被测函数,在满足特定条件会抛出异常,该异常会被 Fuzzer 捕获
public func testApi1(data: Array<UInt8>): Int32 {
    if (data.size == 8 && data[0] == b'C' && data[1] == b'a' && data[2] == b'n' && data[3] == b'g' && data[4] == b'j' &&
        data[5] == b'i' && data[6] == b'e' && data[7] == b'!') {
        throw Exception("TRAP")
    }
    return 0
}

func setTargetFunction((FuzzDataProvider) -> Int32)

public func setTargetFunction(targetFunction: (FuzzDataProvider) -> Int32): Unit

功能:设置 Fuzz 目标函数。

注意:

不支持平台:Windows。

参数:

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 设置被测函数,原本的 testApi 函数将被 testApi1 替代
    fuzzer.setTargetFunction(testApi1)

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

// 被测函数,在满足特定条件会抛出异常,该异常会被 Fuzzer 捕获
public func testApi(data: Array<UInt8>): Int32 {
    if (data.size == 8 && data[0] == b'C' && data[1] == b'a' && data[2] == b'n' && data[3] == b'g' && data[4] == b'j' &&
        data[5] == b'i' && data[6] == b'e' && data[7] == b'!') {
        throw Exception("TRAP")
    }
    return 0
}

// 被测函数,在满足特定条件会抛出异常,该异常会被 Fuzzer 捕获
public func testApi1(dp: FuzzDataProvider): Int32 {
    if (dp.consumeBool() && dp.consumeByte() == b'A' && dp.consumeUInt32() == 0xdeadbeef) {
        throw Exception("TRAP")
    }
    return 0
}

func startFuzz()

public func startFuzz(): Unit

功能:执行 Fuzz。

注意:

不支持平台:Windows。

示例:

import stdx.fuzz.fuzz.*

main() {
    // 创建Fuzzer
    let fuzzer = Fuzzer(testApi)

    // 启动Fuzz,解除注释有临时文件和输出
    // fuzzer.startFuzz()
    return 0
}

// 被测函数,在满足特定条件会抛出异常,该异常会被 Fuzzer 捕获
public func testApi(data: Array<UInt8>): Int32 {
    if (data.size == 8 && data[0] == b'C' && data[1] == b'a' && data[2] == b'n' && data[3] == b'g' && data[4] == b'j' &&
        data[5] == b'i' && data[6] == b'e' && data[7] == b'!') {
        throw Exception("TRAP")
    }
    return 0
}

class FuzzerBuilder

public class FuzzerBuilder {
    public init(targetFunction: (Array<UInt8>) -> Int32)
    public init(targetFunction: (FuzzDataProvider) -> Int32)
}

功能:此类用于 Fuzzer 类的构建。

注意:

不支持平台:Windows。

init((Array<UInt8>) -> Int32)

public init(targetFunction: (Array<UInt8>) -> Int32)

功能:根据以 UInt8 数组为参数,以 Int32 为返回值的目标函数,创建 FuzzerBuilder 实例。

注意:

不支持平台:Windows。

参数:

  • targetFunction: (Array<UInt8>) ->Int32 - 以 UInt8 数组为参数,以 Int32 为返回值的目标函数。

示例:

import stdx.fuzz.fuzz.*

func myFuzzFunction(data: Array<UInt8>): Int32 {
    // 简单的模糊测试函数,检查数据长度
    if (data.size > 3) {
        println("数据长度大于3")
        return 0
    }
    return -1
}

main() {
    // 使用以UInt8数组为目标函数的FuzzerBuilder
    let builder = FuzzerBuilder(myFuzzFunction)
    println("FuzzerBuilder创建成功")
    return 0
}

运行结果:

FuzzerBuilder创建成功

init((FuzzDataProvider) -> Int32)

public init(targetFunction: (FuzzDataProvider) -> Int32)

功能:根据以 FuzzDataProvider 为参数,以 Int32 为返回值的目标函数,创建 FuzzerBuilder 实例。

注意:

不支持平台:Windows。

参数:

示例:

import stdx.fuzz.fuzz.*

func myFuzzFunctionWithProvider(fdp: FuzzDataProvider): Int32 {
    // 使用FuzzDataProvider的简单模糊测试函数
    try {
        let byte = fdp.consumeByte()
        println("消耗了一个字节: ${byte}")
        return 0
    } catch (ex: ExhaustedException) {
        println("数据耗尽")
        return -1
    }
}

main() {
    // 使用以FuzzDataProvider为目标函数的FuzzerBuilder
    let builder = FuzzerBuilder(myFuzzFunctionWithProvider)
    println("FuzzerBuilder创建成功")
    return 0
}

运行结果:

FuzzerBuilder创建成功

func build()

public func build(): Fuzzer

功能:生成一个 Fuzzer 实例。

注意:

不支持平台:Windows。

返回值:

示例:

import stdx.fuzz.fuzz.*

func myFuzzFunction(data: Array<UInt8>): Int32 {
    // 简单的模糊测试函数
    if (data.size >= 1) {
        let value = data[0]
        println("第一个字节值: ${value}")
        return 0
    }
    return -1
}

main() {
    // 创建FuzzerBuilder并构建Fuzzer实例
    let builder = FuzzerBuilder(myFuzzFunction)
    let fuzzer = builder.build()
    println("Fuzzer构建成功")
    return 0
}

运行结果:

Fuzzer构建成功

func setArgs(Array<String>)

public func setArgs(args: Array<String>): FuzzerBuilder

功能:设置 Fuzz 运行参数。

注意:

不支持平台:Windows。

参数:

  • args: Array<String> - Fuzz 运行参数。

返回值:

示例:

import stdx.fuzz.fuzz.*

func myFuzzFunction(data: Array<UInt8>): Int32 {
    // 简单的模糊测试函数
    return 0
}

main() {
    // 创建FuzzerBuilder并设置参数
    let builder = FuzzerBuilder(myFuzzFunction)
    let args = ["-max_len=1024", "-timeout=10"]
    builder.setArgs(args)
    return 0
}

func setTargetFunction((Array<UInt8>) -> Int32)

public func setTargetFunction(targetFunction: (Array<UInt8>) -> Int32): FuzzerBuilder

功能:设置 Fuzz 目标函数。

注意:

不支持平台:Windows。

参数:

  • targetFunction: (Array<UInt8>) ->Int32 - 以 UInt8 数组为参数,以 Int32 为返回值的目标函数。

返回值:

示例:

import stdx.fuzz.fuzz.*

func myFirstFuzzFunction(data: Array<UInt8>): Int32 {
    // 第一个模糊测试函数
    return 0
}

func mySecondFuzzFunction(data: Array<UInt8>): Int32 {
    // 第二个模糊测试函数
    if (data.size > 5) {
        return 1
    }
    return 0
}

main() {
    // 创建FuzzerBuilder并设置目标函数
    let builder = FuzzerBuilder(myFirstFuzzFunction)
    let updatedBuilder = builder.setTargetFunction(mySecondFuzzFunction)
    println("目标函数更新成功")
    return 0
}

运行结果:

目标函数更新成功

func setTargetFunction((FuzzDataProvider) -> Int32)

public func setTargetFunction(targetFunction: (FuzzDataProvider) -> Int32): FuzzerBuilder

功能:设置 Fuzz 目标函数。

注意:

不支持平台:Windows。

参数:

返回值:

示例:

import stdx.fuzz.fuzz.*

func myFirstFuzzFunctionWithProvider(fdp: FuzzDataProvider): Int32 {
    // 第一个使用FuzzDataProvider的模糊测试函数
    return 0
}

func mySecondFuzzFunctionWithProvider(fdp: FuzzDataProvider): Int32 {
    // 第二个使用FuzzDataProvider的模糊测试函数
    try {
        let intVal = fdp.consumeInt32()
        println("消耗了一个Int32值: ${intVal}")
        return 0
    } catch (ex: ExhaustedException) {
        println("数据耗尽")
        return -1
    }
}

main() {
    // 创建FuzzerBuilder并设置FuzzDataProvider目标函数
    let builder = FuzzerBuilder(myFirstFuzzFunctionWithProvider)
    let updatedBuilder = builder.setTargetFunction(mySecondFuzzFunctionWithProvider)
    println("FuzzDataProvider目标函数更新成功")
    return 0
}

运行结果:

FuzzDataProvider目标函数更新成功