From d2173cd47940d99666cbd0890fd932ddc1e1dc25 Mon Sep 17 00:00:00 2001 From: Dimitry Khokhlov Date: Wed, 1 Jul 2015 13:41:55 +0400 Subject: [PATCH] FuzzTests: More Smart Codes --- test/fuzzTesting/createRandomTest.cpp | 3 +- test/fuzzTesting/fuzzHelper.cpp | 117 +++++++++++++++++++++++++- 2 files changed, 117 insertions(+), 3 deletions(-) diff --git a/test/fuzzTesting/createRandomTest.cpp b/test/fuzzTesting/createRandomTest.cpp index b4a00440e..c26c9b7f7 100644 --- a/test/fuzzTesting/createRandomTest.cpp +++ b/test/fuzzTesting/createRandomTest.cpp @@ -220,6 +220,7 @@ void parseTestWithTypes(std::string& _test) options.setWeight(dev::eth::Instruction::STOP, 10); //default 50 options.setWeight(dev::eth::Instruction::SSTORE, 70); options.setWeight(dev::eth::Instruction::CALL, 75); + options.setWeight(dev::eth::Instruction::CALLCODE, 55); options.addAddress(dev::Address("0xffffffffffffffffffffffffffffffffffffffff")); options.addAddress(dev::Address("0x1000000000000000000000000000000000000000")); options.addAddress(dev::Address("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")); @@ -230,7 +231,7 @@ void parseTestWithTypes(std::string& _test) options.addAddress(dev::Address("0x0000000000000000000000000000000000000002")); options.addAddress(dev::Address("0x0000000000000000000000000000000000000003")); options.addAddress(dev::Address("0x0000000000000000000000000000000000000004")); - options.smartCodeProbability = 35; + options.smartCodeProbability = 60; std::vector types = getTypes(); for (unsigned i = 0; i < types.size(); i++) diff --git a/test/fuzzTesting/fuzzHelper.cpp b/test/fuzzTesting/fuzzHelper.cpp index 158dd2798..de7f56dc9 100644 --- a/test/fuzzTesting/fuzzHelper.cpp +++ b/test/fuzzTesting/fuzzHelper.cpp @@ -84,9 +84,17 @@ std::string RandomCode::generate(int _maxOpNumber, RandomCodeOptions _options) } } else + { + if (info.name.find_first_of("PUSH") > 0) + code += toCompactHex(opcode); code += fillArguments((dev::eth::Instruction) opcode, _options); - std::string byte = toCompactHex(opcode); - code += (byte == "") ? "00" : byte; + } + + if (info.name.find_first_of("PUSH") <= 0) + { + std::string byte = toCompactHex(opcode); + code += (byte == "") ? "00" : byte; + } } return code; } @@ -143,6 +151,111 @@ std::string RandomCode::fillArguments(dev::eth::Instruction _opcode, RandomCodeO { switch (_opcode) { + case dev::eth::Instruction::PUSH1: code += rndByteSequence(1); break; + case dev::eth::Instruction::PUSH2: code += rndByteSequence(2); break; + case dev::eth::Instruction::PUSH3: code += rndByteSequence(3); break; + case dev::eth::Instruction::PUSH4: code += rndByteSequence(4); break; + case dev::eth::Instruction::PUSH5: code += rndByteSequence(5); break; + case dev::eth::Instruction::PUSH6: code += rndByteSequence(6); break; + case dev::eth::Instruction::PUSH7: code += rndByteSequence(7); break; + case dev::eth::Instruction::PUSH8: code += rndByteSequence(8); break; + case dev::eth::Instruction::PUSH9: code += rndByteSequence(9); break; + case dev::eth::Instruction::PUSH10: code += rndByteSequence(10); break; + case dev::eth::Instruction::PUSH11: code += rndByteSequence(11); break; + case dev::eth::Instruction::PUSH12: code += rndByteSequence(12); break; + case dev::eth::Instruction::PUSH13: code += rndByteSequence(13); break; + case dev::eth::Instruction::PUSH14: code += rndByteSequence(14); break; + case dev::eth::Instruction::PUSH15: code += rndByteSequence(15); break; + case dev::eth::Instruction::PUSH16: code += rndByteSequence(16); break; + case dev::eth::Instruction::PUSH17: code += rndByteSequence(17); break; + case dev::eth::Instruction::PUSH18: code += rndByteSequence(18); break; + case dev::eth::Instruction::PUSH19: code += rndByteSequence(19); break; + case dev::eth::Instruction::PUSH20: code += rndByteSequence(20); break; + case dev::eth::Instruction::PUSH21: code += rndByteSequence(21); break; + case dev::eth::Instruction::PUSH22: code += rndByteSequence(22); break; + case dev::eth::Instruction::PUSH23: code += rndByteSequence(23); break; + case dev::eth::Instruction::PUSH24: code += rndByteSequence(24); break; + case dev::eth::Instruction::PUSH25: code += rndByteSequence(25); break; + case dev::eth::Instruction::PUSH26: code += rndByteSequence(26); break; + case dev::eth::Instruction::PUSH27: code += rndByteSequence(27); break; + case dev::eth::Instruction::PUSH28: code += rndByteSequence(28); break; + case dev::eth::Instruction::PUSH29: code += rndByteSequence(29); break; + case dev::eth::Instruction::PUSH30: code += rndByteSequence(30); break; + case dev::eth::Instruction::PUSH31: code += rndByteSequence(31); break; + case dev::eth::Instruction::PUSH32: code += rndByteSequence(32); break; + case dev::eth::Instruction::SWAP1: + case dev::eth::Instruction::SWAP2: + case dev::eth::Instruction::SWAP3: + case dev::eth::Instruction::SWAP4: + case dev::eth::Instruction::SWAP5: + case dev::eth::Instruction::SWAP6: + case dev::eth::Instruction::SWAP7: + case dev::eth::Instruction::SWAP8: + case dev::eth::Instruction::SWAP9: + case dev::eth::Instruction::SWAP10: + case dev::eth::Instruction::SWAP11: + case dev::eth::Instruction::SWAP12: + case dev::eth::Instruction::SWAP13: + case dev::eth::Instruction::SWAP14: + case dev::eth::Instruction::SWAP15: + case dev::eth::Instruction::SWAP16: + case dev::eth::Instruction::DUP1: + case dev::eth::Instruction::DUP2: + case dev::eth::Instruction::DUP3: + case dev::eth::Instruction::DUP4: + case dev::eth::Instruction::DUP5: + case dev::eth::Instruction::DUP6: + case dev::eth::Instruction::DUP7: + case dev::eth::Instruction::DUP8: + case dev::eth::Instruction::DUP9: + case dev::eth::Instruction::DUP10: + case dev::eth::Instruction::DUP11: + case dev::eth::Instruction::DUP12: + case dev::eth::Instruction::DUP13: + case dev::eth::Instruction::DUP14: + case dev::eth::Instruction::DUP15: + case dev::eth::Instruction::DUP16: + int times; + switch (_opcode) + { + case dev::eth::Instruction::DUP1: times = 1; break; + case dev::eth::Instruction::SWAP1: + case dev::eth::Instruction::DUP2: times = 2; break; + case dev::eth::Instruction::SWAP2: + case dev::eth::Instruction::DUP3: times = 3; break; + case dev::eth::Instruction::SWAP3: + case dev::eth::Instruction::DUP4: times = 4; break; + case dev::eth::Instruction::SWAP4: + case dev::eth::Instruction::DUP5: times = 5; break; + case dev::eth::Instruction::SWAP5: + case dev::eth::Instruction::DUP6: times = 6; break; + case dev::eth::Instruction::SWAP6: + case dev::eth::Instruction::DUP7: times = 7; break; + case dev::eth::Instruction::SWAP7: + case dev::eth::Instruction::DUP8: times = 8; break; + case dev::eth::Instruction::SWAP8: + case dev::eth::Instruction::DUP9: times = 9; break; + case dev::eth::Instruction::SWAP9: + case dev::eth::Instruction::DUP10: times = 10; break; + case dev::eth::Instruction::SWAP10: + case dev::eth::Instruction::DUP11: times = 11; break; + case dev::eth::Instruction::SWAP11: + case dev::eth::Instruction::DUP12: times = 12; break; + case dev::eth::Instruction::SWAP12: + case dev::eth::Instruction::DUP13: times = 13; break; + case dev::eth::Instruction::SWAP13: + case dev::eth::Instruction::DUP14: times = 14; break; + case dev::eth::Instruction::SWAP14: + case dev::eth::Instruction::DUP15: times = 15; break; + case dev::eth::Instruction::SWAP15: + case dev::eth::Instruction::DUP16: times = 16; break; + case dev::eth::Instruction::SWAP16: times = 17; break; + default: times = 1; + } + for (int i = 0; i < times; i ++) + code += getPushCode(randUniIntGen() % 32); + + break; case dev::eth::Instruction::CREATE: //(CREATE value mem1 mem2) code += getPushCode(randUniIntGen() % 128); //memlen1