@@ -107,7 +107,8 @@ func NewFuzzer(config config.ProjectConfig) (*Fuzzer, error) {
107
107
testCases : make ([]TestCase , 0 ),
108
108
testCasesFinished : make (map [string ]TestCase ),
109
109
Hooks : FuzzerHooks {
110
- NewCallSequenceGeneratorConfigFunc : defaultNewCallSequenceGeneratorConfigFunc ,
110
+ NewCallSequenceGeneratorConfigFunc : defaultCallSequenceGeneratorConfigFunc ,
111
+ NewShrinkingValueMutatorFunc : defaultShrinkingValueMutatorFunc ,
111
112
ChainSetupFunc : chainSetupFromCompilations ,
112
113
CallSequenceTestFuncs : make ([]CallSequenceTestFunc , 0 ),
113
114
},
@@ -376,11 +377,11 @@ func chainSetupFromCompilations(fuzzer *Fuzzer, testChain *chain.TestChain) erro
376
377
return nil
377
378
}
378
379
379
- // defaultNewCallSequenceGeneratorConfigFunc is a NewCallSequenceGeneratorConfigFunc which creates a
380
+ // defaultCallSequenceGeneratorConfigFunc is a NewCallSequenceGeneratorConfigFunc which creates a
380
381
// CallSequenceGeneratorConfig with a default configuration. Returns the config or an error, if one occurs.
381
- func defaultNewCallSequenceGeneratorConfigFunc (fuzzer * Fuzzer , valueSet * valuegeneration.ValueSet , randomProvider * rand.Rand ) (* CallSequenceGeneratorConfig , error ) {
382
- // Create the underlying value generator for the worker and its sequence generator .
383
- valueGenConfig := & valuegeneration.MutatingValueGeneratorConfig {
382
+ func defaultCallSequenceGeneratorConfigFunc (fuzzer * Fuzzer , valueSet * valuegeneration.ValueSet , randomProvider * rand.Rand ) (* CallSequenceGeneratorConfig , error ) {
383
+ // Create the value generator and mutator for the worker.
384
+ mutationalGeneratorConfig := & valuegeneration.MutationalValueGeneratorConfig {
384
385
MinMutationRounds : 0 ,
385
386
MaxMutationRounds : 1 ,
386
387
GenerateRandomAddressBias : 0.5 ,
@@ -406,7 +407,7 @@ func defaultNewCallSequenceGeneratorConfigFunc(fuzzer *Fuzzer, valueSet *valuege
406
407
GenerateRandomStringMaxSize : 100 ,
407
408
},
408
409
}
409
- valueGenerator := valuegeneration .NewMutatingValueGenerator ( valueGenConfig , valueSet , randomProvider )
410
+ mutationalGenerator := valuegeneration .NewMutationalValueGenerator ( mutationalGeneratorConfig , valueSet , randomProvider )
410
411
411
412
// Create a sequence generator config which uses the created value generator.
412
413
sequenceGenConfig := & CallSequenceGeneratorConfig {
@@ -419,11 +420,23 @@ func defaultNewCallSequenceGeneratorConfigFunc(fuzzer *Fuzzer, valueSet *valuege
419
420
RandomMutatedCorpusTailWeight : 10 ,
420
421
RandomMutatedSpliceAtRandomWeight : 20 ,
421
422
RandomMutatedInterleaveAtRandomWeight : 10 ,
422
- ValueGenerator : valueGenerator ,
423
+ ValueGenerator : mutationalGenerator ,
424
+ ValueMutator : mutationalGenerator ,
423
425
}
424
426
return sequenceGenConfig , nil
425
427
}
426
428
429
+ // defaultShrinkingValueMutatorFunc is a NewShrinkingValueMutatorFunc which creates value mutator to be used for
430
+ // shrinking purposes. Returns the value mutator or an error, if one occurs.
431
+ func defaultShrinkingValueMutatorFunc (fuzzer * Fuzzer , valueSet * valuegeneration.ValueSet , randomProvider * rand.Rand ) (valuegeneration.ValueMutator , error ) {
432
+ // Create the shrinking value mutator for the worker.
433
+ shrinkingValueMutatorConfig := & valuegeneration.ShrinkingValueMutatorConfig {
434
+ ShrinkValueProbability : 0.1 ,
435
+ }
436
+ shrinkingValueMutator := valuegeneration .NewShrinkingValueMutator (shrinkingValueMutatorConfig , valueSet , randomProvider )
437
+ return shrinkingValueMutator , nil
438
+ }
439
+
427
440
// spawnWorkersLoop is a method which spawns a config-defined amount of FuzzerWorker to carry out the fuzzing campaign.
428
441
// This function exits when Fuzzer.ctx is cancelled.
429
442
func (f * Fuzzer ) spawnWorkersLoop (baseTestChain * chain.TestChain ) error {
0 commit comments