Changeset View
Changeset View
Standalone View
Standalone View
src/script/interpreter.cpp
Show First 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | |||||
static bool IsOpcodeDisabled(opcodetype opcode, uint32_t flags) { | static bool IsOpcodeDisabled(opcodetype opcode, uint32_t flags) { | ||||
bool fEnabledOpCodesMagnetic = | bool fEnabledOpCodesMagnetic = | ||||
(flags & SCRIPT_ENABLE_MAGNETIC_OPCODES) != 0; | (flags & SCRIPT_ENABLE_MAGNETIC_OPCODES) != 0; | ||||
if (fEnabledOpCodesMagnetic) { | if (fEnabledOpCodesMagnetic) { | ||||
switch (opcode) { | switch (opcode) { | ||||
case OP_INVERT: | case OP_INVERT: | ||||
return true; | return false; | ||||
case OP_2MUL: | case OP_2MUL: | ||||
return true; | return true; | ||||
case OP_2DIV: | case OP_2DIV: | ||||
return true; | return true; | ||||
case OP_MUL: | case OP_MUL: | ||||
▲ Show 20 Lines • Show All 1,083 Lines • ▼ Show 20 Lines | |||||
// The resulting number must be a valid number. | // The resulting number must be a valid number. | ||||
if (!CScriptNum::IsMinimallyEncoded(n)) { | if (!CScriptNum::IsMinimallyEncoded(n)) { | ||||
return set_error(serror, | return set_error(serror, | ||||
SCRIPT_ERR_INVALID_NUMBER_RANGE); | SCRIPT_ERR_INVALID_NUMBER_RANGE); | ||||
} | } | ||||
} break; | } break; | ||||
case OP_INVERT: { | |||||
// (x -- out) | |||||
if (stack.size() < 1) { | |||||
return set_error( | |||||
serror, SCRIPT_ERR_INVALID_STACK_OPERATION); | |||||
} | |||||
valtype &x = stacktop(-1); | |||||
for (size_t i = 0; i < x.size(); i++) { | |||||
x[i] = ~x[i]; | |||||
} | |||||
} break; | |||||
default: | default: | ||||
return set_error(serror, SCRIPT_ERR_BAD_OPCODE); | return set_error(serror, SCRIPT_ERR_BAD_OPCODE); | ||||
} | } | ||||
} | } | ||||
// Size limits | // Size limits | ||||
if (stack.size() + altstack.size() > 1000) { | if (stack.size() + altstack.size() > 1000) { | ||||
return set_error(serror, SCRIPT_ERR_STACK_SIZE); | return set_error(serror, SCRIPT_ERR_STACK_SIZE); | ||||
▲ Show 20 Lines • Show All 445 Lines • Show Last 20 Lines |