19 size_t CrossOver(
const uint8_t *Data1,
size_t Size1,
20 const uint8_t *Data2,
size_t Size2,
21 uint8_t *Out,
size_t MaxOutSize) {
22 assert(Size1 || Size2);
23 MaxOutSize = rand() % MaxOutSize + 1;
27 size_t *InPos = &Pos1;
28 size_t InSize = Size1;
29 const uint8_t *Data = Data1;
30 bool CurrentlyUsingFirstData =
true;
31 while (OutPos < MaxOutSize && (Pos1 < Size1 || Pos2 < Size2)) {
33 size_t OutSizeLeft = MaxOutSize - OutPos;
34 if (*InPos < InSize) {
35 size_t InSizeLeft = InSize - *InPos;
36 size_t MaxExtraSize =
std::min(OutSizeLeft, InSizeLeft);
37 size_t ExtraSize = rand() % MaxExtraSize + 1;
38 memcpy(Out + OutPos, Data + *InPos, ExtraSize);
40 (*InPos) += ExtraSize;
43 InPos = CurrentlyUsingFirstData ? &Pos2 : &Pos1;
44 InSize = CurrentlyUsingFirstData ? Size2 : Size1;
45 Data = CurrentlyUsingFirstData ? Data2 : Data1;
46 CurrentlyUsingFirstData = !CurrentlyUsingFirstData;
Number of individual test Apply this number of consecutive mutations to each input exit after the first new interesting input is found the minimized corpus is saved into the first input directory Number of jobs to run If min(jobs, NumberOfCpuCores()/2)\" is used.") FUZZER_FLAG_INT(reload
size_t CrossOver(const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize)