Skip to content
Snippets Groups Projects
Commit 44242cbb authored by Ewen Smith's avatar Ewen Smith
Browse files

Made only one run that has bad instructions

parent d9d16823
No related branches found
No related tags found
No related merge requests found
Pipeline #59089 passed
......@@ -52,7 +52,7 @@ public class Fuzzer {
// Current stack of instructions
private static ArrayList<Instruction> instructionStack = new ArrayList<Instruction>();
// Max stack of instructions before resetting stack
private static final int MAX_STACK = 2;
private static final int MAX_STACK = 5;
public static void main(String[] args) throws IOException {
System.out.println(Instruction.getBNF());
......@@ -122,22 +122,25 @@ public class Fuzzer {
switch (runCount){
case 0:
// Test with stack full
return generateInput(true, INSTRUCTION_MAX, MAX_STACK_SIZE, false, false);
return generateInput(true, INSTRUCTION_MAX, MAX_STACK_SIZE, false, false, false);
case 1:
// Test with stack full
return generateInput(true, INSTRUCTION_MAX, MAX_STACK_SIZE - 1, false, false);
return generateInput(true, INSTRUCTION_MAX, MAX_STACK_SIZE - 1, false, false, false);
case 3:
// Run static tests and empty stack
return getStaticTests() + generateInput(true, INSTRUCTION_MAX, 0, false, false);
return getStaticTests() + generateInput(true, INSTRUCTION_MAX, 0, false, false, false);
case 4:
// Test with dynamic probability
return generateInput(true, INSTRUCTION_MAX, 0, true, false);
return generateInput(true, INSTRUCTION_MAX, 0, true, false, false);
case 5:
// Test with long var names
return generateInput(true, INSTRUCTION_MAX, 0, false, true);
return generateInput(true, INSTRUCTION_MAX, 0, false, true, false);
case 6:
// Test with missing vars
return generateInput(true, INSTRUCTION_MAX, 0, false, true, true);
}
// Run from random stack
return generateInput(true, INSTRUCTION_MAX, 0, false, false);
return generateInput(true, INSTRUCTION_MAX, 0, false, false, false);
}
/*
......@@ -173,7 +176,7 @@ public class Fuzzer {
boolean stackFull = rand.nextInt(100) < STACK_FULL_PERCENTAGE;
result.append(generateInput(false,
INSTRUCTION_MAX, MAX_STACK_SIZE, false, false));
INSTRUCTION_MAX, MAX_STACK_SIZE, false, false, false));
// Increment generated
generated += 1;
}
......@@ -219,14 +222,14 @@ public class Fuzzer {
* @param numInstructions for the line
* @return the concatenated input for the program as a string
*/
private static String generateInput(boolean correct, long numInstructions, int stackPreload, boolean dynamicProb, boolean longVarNames){
private static String generateInput(boolean correct, long numInstructions, int stackPreload, boolean dynamicProb, boolean longVarNames, boolean badInstruct){
int stackSize = 0;
int counter = 0;
StringBuilder result = new StringBuilder();
for ( int i = 0 ; i < stackPreload ; i++ ) {
result.append(completeInstruction(true, Instruction.PUSH, false));
result.append(completeInstruction(true, Instruction.PUSH, false, false));
stackSize++;
}
......@@ -234,7 +237,7 @@ public class Fuzzer {
while (counter < numInstructions) {
Instruction newInstr = Instruction.getRandomInstruction(stackSize, instructionStack, pathwayProb);
stackSize = stackSize + newInstr.getStackChange();
result.append(completeInstruction(true, newInstr, false));
result.append(completeInstruction(true, newInstr, false, false));
if (dynamicProb) {
incrementStackAndCount(newInstr);
}
......@@ -245,13 +248,13 @@ public class Fuzzer {
Instruction newInstr;
if (rand.nextInt(100) < LINE_ERROR_PERCENTAGE){
newInstr = Instruction.getRandomInstruction(2, instructionStack, pathwayProb);
result.append(completeInstruction(false, newInstr, longVarNames));
result.append(completeInstruction(false, newInstr, longVarNames, badInstruct));
if (dynamicProb) {
incrementStackAndCount(newInstr);
}
} else {
newInstr = Instruction.getRandomInstruction(stackSize, instructionStack, pathwayProb);
result.append(completeInstruction(true, newInstr, false));
result.append(completeInstruction(true, newInstr, false, false));
if (dynamicProb) {
incrementStackAndCount(newInstr);
}
......@@ -274,7 +277,7 @@ public class Fuzzer {
* @param instruction type
* @return string with parameter
*/
private static String completeInstruction(boolean correct, Instruction instruction, boolean longVarNames){
private static String completeInstruction(boolean correct, Instruction instruction, boolean longVarNames, boolean badInstruct){
String name = "";
switch (instruction) {
......@@ -284,16 +287,19 @@ public class Fuzzer {
name = " " + ((Integer) randomRange(VAR_MIN, VAR_MAX)).toString();
} else {
// If incorrect, increase the range to outside +- int31_t
if (!badInstruct) {
name = " " + ((Long) (randomRange(-1, 1) * ((long) VAR_MAX + (long) randomRange(0, VAR_MAX)))).toString();
}
}
break;
case LOAD:
case REM:
// If not correct, make up a name not in the list
if (!correct){
if (!badInstruct) {
name = generateName(longVarNames);
}
}
// If no variables, return empty string
else if (vars.size() == 0){
return "";
......@@ -314,8 +320,10 @@ public class Fuzzer {
}
// Otherwise get name from exiting, or no name
else {
if (!badInstruct) {
name = vars.get(randomRange(0, vars.size() - 1));
}
}
name = " " + name;
......@@ -324,8 +332,10 @@ public class Fuzzer {
if (correct){
name = " " + generateName(false) + ".txt";
} else {
if (!badInstruct) {
name = " " + generateName(longVarNames) + ".txt";
}
}
break;
case PLUS:
case SUB:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment