| 25 | } // namespace |
| 26 | |
| 27 | FUZZ_TARGET(scriptnum_ops) |
| 28 | { |
| 29 | FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); |
| 30 | CScriptNum script_num = ConsumeScriptNum(fuzzed_data_provider); |
| 31 | LIMITED_WHILE(fuzzed_data_provider.remaining_bytes() > 0, 1000000) { |
| 32 | CallOneOf( |
| 33 | fuzzed_data_provider, |
| 34 | [&] { |
| 35 | const int64_t i = fuzzed_data_provider.ConsumeIntegral<int64_t>(); |
| 36 | assert((script_num == i) != (script_num != i)); |
| 37 | assert((script_num <= i) != (script_num > i)); |
| 38 | assert((script_num >= i) != (script_num < i)); |
| 39 | // Avoid signed integer overflow: |
| 40 | // script/script.h:264:93: runtime error: signed integer overflow: -2261405121394637306 + -9223372036854775802 cannot be represented in type 'long' |
| 41 | if (IsValidAddition(script_num, CScriptNum{i})) { |
| 42 | assert((script_num + i) - i == script_num); |
| 43 | } |
| 44 | // Avoid signed integer overflow: |
| 45 | // script/script.h:265:93: runtime error: signed integer overflow: 9223371895120855039 - -9223372036854710486 cannot be represented in type 'long' |
| 46 | if (IsValidSubtraction(script_num, CScriptNum{i})) { |
| 47 | assert((script_num - i) + i == script_num); |
| 48 | } |
| 49 | }, |
| 50 | [&] { |
| 51 | const CScriptNum random_script_num = ConsumeScriptNum(fuzzed_data_provider); |
| 52 | assert((script_num == random_script_num) != (script_num != random_script_num)); |
| 53 | assert((script_num <= random_script_num) != (script_num > random_script_num)); |
| 54 | assert((script_num >= random_script_num) != (script_num < random_script_num)); |
| 55 | // Avoid signed integer overflow: |
| 56 | // script/script.h:264:93: runtime error: signed integer overflow: -9223126527765971126 + -9223372036854756825 cannot be represented in type 'long' |
| 57 | if (IsValidAddition(script_num, random_script_num)) { |
| 58 | assert((script_num + random_script_num) - random_script_num == script_num); |
| 59 | } |
| 60 | // Avoid signed integer overflow: |
| 61 | // script/script.h:265:93: runtime error: signed integer overflow: 6052837899185946624 - -9223372036854775808 cannot be represented in type 'long' |
| 62 | if (IsValidSubtraction(script_num, random_script_num)) { |
| 63 | assert((script_num - random_script_num) + random_script_num == script_num); |
| 64 | } |
| 65 | }, |
| 66 | [&] { |
| 67 | const CScriptNum random_script_num = ConsumeScriptNum(fuzzed_data_provider); |
| 68 | if (!IsValidAddition(script_num, random_script_num)) { |
| 69 | // Avoid assertion failure: |
| 70 | // ./script/script.h:292: CScriptNum &CScriptNum::operator+=(const int64_t &): Assertion `rhs == 0 || (rhs > 0 && m_value <= std::numeric_limits<int64_t>::max() - rhs) || (rhs < 0 && m_value >= std::numeric_limits<int64_t>::min() - rhs)' failed. |
| 71 | return; |
| 72 | } |
| 73 | script_num += random_script_num; |
| 74 | }, |
| 75 | [&] { |
| 76 | const CScriptNum random_script_num = ConsumeScriptNum(fuzzed_data_provider); |
| 77 | if (!IsValidSubtraction(script_num, random_script_num)) { |
| 78 | // Avoid assertion failure: |
| 79 | // ./script/script.h:300: CScriptNum &CScriptNum::operator-=(const int64_t &): Assertion `rhs == 0 || (rhs > 0 && m_value >= std::numeric_limits<int64_t>::min() + rhs) || (rhs < 0 && m_value <= std::numeric_limits<int64_t>::max() + rhs)' failed. |
| 80 | return; |
| 81 | } |
| 82 | script_num -= random_script_num; |
| 83 | }, |
| 84 | [&] { |
nothing calls this directly
no test coverage detected