FuzzedDataProvider
是 Jazzer 提供的一个接口,用于生成模糊测试数据。它包含多个方法,可以生成不同类型的数据。下面详细介绍这些方法及其参数和用法。
1. consumeBoolean()
- 描述:生成一个布尔值。
- 返回类型:
boolean
- 示例:
boolean value = data.consumeBoolean();
2. consumeByte()
- 描述:生成一个字节值。
- 返回类型:
byte
- 示例:
byte value = data.consumeByte();
3. consumeShort()
- 描述:生成一个短整型值。
- 返回类型:
short
- 示例:
short value = data.consumeShort();
4. consumeInt()
- 描述:生成一个整型值。
- 返回类型:
int
- 示例:
int value = data.consumeInt();
5. consumeLong()
- 描述:生成一个长整型值。
- 返回类型:
long
- 示例:
long value = data.consumeLong();
6. consumeFloat()
- 描述:生成一个浮点型值。
- 返回类型:
float
- 示例:
float value = data.consumeFloat();
7. consumeDouble()
- 描述:生成一个双精度浮点型值。
- 返回类型:
double
- 示例:
double value = data.consumeDouble();
8. consumeString(int maxLength)
- 描述:生成一个包含 ASCII 字符的字符串。
- 参数:
maxLength
- 生成字符串的最大长度。 - 返回类型:
String
- 示例:
String value = data.consumeString(50);
9. consumeAsciiString(int maxLength)
- 描述:生成一个包含 ASCII 字符的字符串。
- 参数:
maxLength
- 生成字符串的最大长度。 - 返回类型:
String
- 示例:
String value = data.consumeAsciiString(50);
10. consumeRemainingAsString()
- 描述:生成一个包含剩余所有数据的字符串。
- 返回类型:
String
- 示例:
String value = data.consumeRemainingAsString();
11. consumeRemainingAsString(Charset charset)
- 描述:生成一个包含剩余所有数据的字符串,并使用指定的字符集。
- 参数:
charset
- 指定的字符集。 - 返回类型:
String
- 示例:
String value = data.consumeRemainingAsString(StandardCharsets.UTF_8);
12. consumeBytes(int maxLength)
- 描述:生成一个字节数组。
- 参数:
maxLength
- 生成字节数组的最大长度。 - 返回类型:
byte[]
- 示例:
byte[] bytes = data.consumeBytes(100);
13. consumeRemainingAsBytes()
- 描述:生成包含剩余所有数据的字节数组。
- 返回类型:
byte[]
- 示例:
byte[] bytes = data.consumeRemainingAsBytes();
14. consumeInt(int min, int max)
- 描述:生成一个在指定范围内的整型值。
- 参数:
min
- 最小值,max
- 最大值。 - 返回类型:
int
- 示例:
int value = data.consumeInt(1, 100);
15. consumeLong(long min, long max)
- 描述:生成一个在指定范围内的长整型值。
- 参数:
min
- 最小值,max
- 最大值。 - 返回类型:
long
- 示例:
long value = data.consumeLong(1L, 100L);
16. consumeFloat(float min, float max)
- 描述:生成一个在指定范围内的浮点型值。
- 参数:
min
- 最小值,max
- 最大值。 - 返回类型:
float
- 示例:
float value = data.consumeFloat(1.0f, 10.0f);
17. consumeDouble(double min, double max)
- 描述:生成一个在指定范围内的双精度浮点型值。
- 参数:
min
- 最小值,max
- 最大值。 - 返回类型:
double
- 示例:
double value = data.consumeDouble(1.0, 10.0);
18. pickValue(T... values)
- 描述:从给定的值中随机选择一个值。
- 参数:
values
- 要选择的值。 - 返回类型:
T
- 示例:
String choice = data.pickValue("A", "B", "C");
综合示例
下面是一个综合使用 FuzzedDataProvider
不同方法的示例:
import com.code_intelligence.jazzer.api.FuzzedDataProvider;
import com.code_intelligence.jazzer.junit.FuzzTest;
public class MyFuzzTest {
@FuzzTest
void myFuzzTest(FuzzedDataProvider data) {
boolean boolValue = data.consumeBoolean();
byte byteValue = data.consumeByte();
short shortValue = data.consumeShort();
int intValue = data.consumeInt();
long longValue = data.consumeLong();
float floatValue = data.consumeFloat();
double doubleValue = data.consumeDouble();
String asciiString = data.consumeAsciiString(50);
byte[] bytes = data.consumeBytes(100);
String utf8String = data.consumeRemainingAsString(StandardCharsets.UTF_8);
int boundedIntValue = data.consumeInt(1, 100);
long boundedLongValue = data.consumeLong(1L, 100L);
float boundedFloatValue = data.consumeFloat(1.0f, 10.0f);
double boundedDoubleValue = data.consumeDouble(1.0, 10.0);
String pickedValue = data.pickValue("Option1", "Option2", "Option3");
// 输出生成的数据
System.out.println("Boolean: " + boolValue);
System.out.println("Byte: " + byteValue);
System.out.println("Short: " + shortValue);
System.out.println("Int: " + intValue);
System.out.println("Long: " + longValue);
System.out.println("Float: " + floatValue);
System.out.println("Double: " + doubleValue);
System.out.println("ASCII String: " + asciiString);
System.out.println("Bytes: " + java.util.Arrays.toString(bytes));
System.out.println("UTF-8 String: " + utf8String);
System.out.println("Bounded Int: " + boundedIntValue);
System.out.println("Bounded Long: " + boundedLongValue);
System.out.println("Bounded Float: " + boundedFloatValue);
System.out.println("Bounded Double: " + boundedDoubleValue);
System.out.println("Picked Value: " + pickedValue);
}
}