Global Metrics
path: .metrics.halstead.time
old: 2664.202676644462
new: 1748.8656098401073
path: .metrics.halstead.estimated_program_length
old: 782.6464364849548
new: 233.1201147370535
path: .metrics.halstead.difficulty
old: 15.316037735849056
new: 28.603448275862068
path: .metrics.halstead.level
old: 0.06529103788112103
new: 0.03496081977094635
path: .metrics.halstead.effort
old: 47955.64817960031
new: 31479.580977121932
path: .metrics.halstead.N1
old: 260.0
new: 116.0
path: .metrics.halstead.N2
old: 191.0
new: 79.0
path: .metrics.halstead.bugs
old: 0.439985727544747
new: 0.3323262960800464
path: .metrics.halstead.n2
old: 106.0
new: 29.0
path: .metrics.halstead.purity_ratio
old: 1.7353579522948002
new: 1.195487767882326
path: .metrics.halstead.vocabulary
old: 123.0
new: 50.0
path: .metrics.halstead.volume
old: 3131.074041907997
new: 1100.5519570060712
path: .metrics.halstead.length
old: 451.0
new: 195.0
path: .metrics.halstead.n1
old: 17.0
new: 21.0
path: .metrics.loc.cloc
old: 23.0
new: 13.0
path: .metrics.loc.sloc
old: 147.0
new: 51.0
path: .metrics.loc.blank
old: 28.0
new: 3.0
path: .metrics.loc.lloc
old: 4.0
new: 12.0
path: .metrics.loc.ploc
old: 96.0
new: 35.0
path: .metrics.nexits.average
old: 0.6666666666666666
new: 1.0
path: .metrics.nexits.sum
old: 2.0
new: 1.0
path: .metrics.mi.mi_original
old: 44.38950897510793
new: 68.35587576728986
path: .metrics.mi.mi_visual_studio
old: 25.958777178425688
new: 39.97419635514027
path: .metrics.mi.mi_sei
old: 18.82816630096289
new: 59.276300218411265
path: .metrics.nargs.average
old: 0.3333333333333333
new: 6.0
path: .metrics.nargs.sum
old: 1.0
new: 6.0
path: .metrics.cyclomatic.average
old: 1.3076923076923077
new: 3.6666666666666665
path: .metrics.cyclomatic.sum
old: 17.0
new: 11.0
path: .metrics.nom.functions
old: 3.0
new: 1.0
path: .metrics.nom.total
old: 3.0
new: 1.0
path: .metrics.cognitive.average
old: 0.0
new: 6.0
path: .metrics.cognitive.sum
old: 0.0
new: 6.0
Spaces Data
Minimal test - lines (16, 51)
path: .spaces[0].metrics.halstead.level
old: null
new: 0.03258145363408521
path: .spaces[0].metrics.halstead.vocabulary
old: 1.0
new: 47.0
path: .spaces[0].metrics.halstead.length
old: 1.0
new: 192.0
path: .spaces[0].metrics.halstead.N2
old: 1.0
new: 76.0
path: .spaces[0].metrics.halstead.N1
old: 0.0
new: 116.0
path: .spaces[0].metrics.halstead.n2
old: 1.0
new: 26.0
path: .spaces[0].metrics.halstead.n1
old: 0.0
new: 21.0
path: .spaces[0].metrics.halstead.effort
old: 0.0
new: 32732.76482687081
path: .spaces[0].metrics.halstead.time
old: 0.0
new: 1818.486934826156
path: .spaces[0].metrics.halstead.bugs
old: 0.0
new: 0.3410886007581034
path: .spaces[0].metrics.halstead.volume
old: 0.0
new: 1066.4810595221063
path: .spaces[0].metrics.halstead.difficulty
old: 0.0
new: 30.692307692307693
path: .spaces[0].metrics.halstead.estimated_program_length
old: null
new: 214.45009855002235
path: .spaces[0].metrics.halstead.purity_ratio
old: null
new: 1.1169275966146996
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 6.0
path: .spaces[0].metrics.cognitive.average
old: null
new: 6.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 12.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 2.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[0].metrics.loc.ploc
old: 1.0
new: 31.0
path: .spaces[0].metrics.loc.sloc
old: 1.0
new: 36.0
path: .spaces[0].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 5.0
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 10.0
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 6.0
path: .spaces[0].metrics.nargs.average
old: null
new: 6.0
path: .spaces[0].metrics.mi.mi_sei
old: null
new: 54.26501525555858
path: .spaces[0].metrics.mi.mi_visual_studio
old: null
new: 43.50407622804155
path: .spaces[0].metrics.mi.mi_original
old: null
new: 74.39197034995105
path: .spaces[0].metrics.nexits.average
old: null
new: 1.0
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 1.0
Code
namespace fuzzer {
// Cross Data1 and Data2, store the result (up to MaxOutSize bytes) in Out.
size_t MutationDispatcher::CrossOver(const uint8_t *Data1, size_t Size1,
const uint8_t *Data2, size_t Size2,
uint8_t *Out, size_t MaxOutSize) {
assert(Size1 || Size2);
MaxOutSize = Rand(MaxOutSize) + 1;
size_t OutPos = 0;
size_t Pos1 = 0;
size_t Pos2 = 0;
size_t *InPos = &Pos1;
size_t InSize = Size1;
const uint8_t *Data = Data1;
bool CurrentlyUsingFirstData = true;
while (OutPos < MaxOutSize && (Pos1 < Size1 || Pos2 < Size2)) {
// Merge a part of Data into Out.
size_t OutSizeLeft = MaxOutSize - OutPos;
if (*InPos < InSize) {
size_t InSizeLeft = InSize - *InPos;
size_t MaxExtraSize = std::min(OutSizeLeft, InSizeLeft);
size_t ExtraSize = Rand(MaxExtraSize) + 1;
memcpy(Out + OutPos, Data + *InPos, ExtraSize);
OutPos += ExtraSize;
(*InPos) += ExtraSize;
}
// Use the other input data on the next iteration.
InPos = CurrentlyUsingFirstData ? &Pos2 : &Pos1;
InSize = CurrentlyUsingFirstData ? Size2 : Size1;
Data = CurrentlyUsingFirstData ? Data2 : Data1;
CurrentlyUsingFirstData = !CurrentlyUsingFirstData;
}
return OutPos;
}
} // namespace fuzzer