def create_population(grammars, diversification_factor=1):
    mutated_grams = []
    for g in grammars:
        cmd_gram = utilityFunctions.copy_dict(g)
        update_current(cmd_gram)
        generated = 0
        while generated < diversification_factor:
            ''' 
            global move_command
            if move_command == 0:
                move_command = 1 if utilityFunctions.flip_coin(10) == 1 else 0
            '''

            # 3 steps:
            # 1. random crossover
            # check if no crossover fuzzer
            new_gram = utilityFunctions.copy_dict(
                gram_crossover(cmd_gram, move_command)
            ) if fuzz_type != 2 else utilityFunctions.copy_dict(cmd_gram)

            if fuzz_type != 3:  # check if no mutation fuzz
                # 2. random add or delete
                if utilityFunctions.flip_coin() == 1:
                    gram_random_add_delete(new_gram, move_command)

                # 3. random valid/invalid
                if utilityFunctions.flip_coin() == 1:
                    make_gram_invalid(new_gram)

            if new_gram not in stored_grammar and new_gram != standard_grammar:
                mutated_grams.append(new_gram)
                generated += 1
    return mutated_grams
Esempio n. 2
0
def modify_set(gram_set, diversification_factor):
    modified_set = []
    for _ in range(diversification_factor):
        modified_set.append([])

    for g in gram_set:
        generated = 0
        previous_gram = {}
        while generated < diversification_factor:
            new_gram = utilityFunctions.copy_dict(g)
            modify_grammar(new_gram, fuzz_settings, move_command)
            if new_gram not in standard_set and new_gram != previous_gram:
                modified_set[generated].append(new_gram)
                generated += 1
                previous_gram = utilityFunctions.copy_dict(new_gram)

    return modified_set
Esempio n. 3
0
def modify_grammar_back(gram):
    cmd_gram = utilityFunctions.copy_dict(gram)
    # 3 steps:
    # 1. random crossover
    # check if no crossover fuzzer
    new_gram = utilityFunctions.copy_dict(
        gram_crossover(cmd_gram, move_command)
    ) if fuzz_type != 2 else utilityFunctions.copy_dict(cmd_gram)

    if fuzz_type != 3:  # check if no mutation fuzz
        # 2. random add or delete
        if utilityFunctions.flip_coin() == 1:
            gram_random_add_delete(new_gram, move_command)

        # 3. random valid/invalid
        if utilityFunctions.flip_coin() == 1:
            make_gram_invalid(new_gram)

    return new_gram
Esempio n. 4
0
def create_population(grammars, diversification_factor=1):
    mutated_grams = []

    if fuzz_settings[1] == '1':  # crossover
        multi_gram_crossover(grammars)

    for g in grammars:
        cmd_gram = utilityFunctions.copy_dict(g)
        update_current(cmd_gram)
        generated = 0
        while generated < diversification_factor:
            new_gram = utilityFunctions.copy_dict(cmd_gram)

            modify_grammar(new_gram, fuzz_settings, move_command)

            if new_gram not in stored_grammar and new_gram != standard_grammar:
                mutated_grams.append(new_gram)
                generated += 1
            #else:
            #    print ('new_gram not new!')
    return mutated_grams
Esempio n. 5
0
def create_population(grammars, diversification_factor=1):
    mutated_grams = []
    for g in grammars:
        cmd_gram = utilityFunctions.copy_dict(g)
        update_current(cmd_gram)
        generated = 0
        while generated < diversification_factor:
            ''' 
            global move_command
            if move_command == 0:
                move_command = 1 if utilityFunctions.flip_coin(10) == 1 else 0
            '''
            new_gram = utilityFunctions.copy_dict(cmd_gram)

            modify_grammar(new_gram, fuzz_settings, move_command)

            if new_gram not in stored_grammar and new_gram != standard_grammar:
                mutated_grams.append(new_gram)
                generated += 1
            #else:
            #    print ('new_gram not new!')
    return mutated_grams