Changeset View
Changeset View
Standalone View
Standalone View
src/script/interpreter.cpp
Show First 20 Lines • Show All 1,218 Lines • ▼ Show 20 Lines | try { | ||||
// | // | ||||
// Conversion operations | // Conversion operations | ||||
// | // | ||||
case OP_BIN2NUM: { | case OP_BIN2NUM: { | ||||
if (!fEnabledOpCodesMonolith) { | if (!fEnabledOpCodesMonolith) { | ||||
// Disabled opcodes. | // Disabled opcodes. | ||||
return set_error(serror, SCRIPT_ERR_DISABLED_OPCODE); | return set_error(serror, SCRIPT_ERR_DISABLED_OPCODE); | ||||
} | } | ||||
// (in -- out) | |||||
if (stack.size() < 1) { | |||||
return set_error( | |||||
serror, SCRIPT_ERR_INVALID_STACK_OPERATION); | |||||
} | |||||
valtype bin = stacktop(-1); | |||||
// big endian to little endian conversion | |||||
std::reverse(bin.begin(), bin.end()); | |||||
CScriptNum num(bin, false); | |||||
if (num > (INT_MAX >> 1) || num < (INT_MIN >> 1)) { | |||||
return set_error( | |||||
serror, SCRIPT_ERR_INVALID_BIN2NUM_OPERATION); | |||||
} | |||||
stack.pop_back(); | |||||
stack.push_back(num.getvch()); | |||||
} break; | } break; | ||||
case OP_NUM2BIN: { | case OP_NUM2BIN: { | ||||
if (!fEnabledOpCodesMonolith) { | if (!fEnabledOpCodesMonolith) { | ||||
// Disabled opcodes. | // Disabled opcodes. | ||||
return set_error(serror, SCRIPT_ERR_DISABLED_OPCODE); | return set_error(serror, SCRIPT_ERR_DISABLED_OPCODE); | ||||
} | } | ||||
} break; | } break; | ||||
▲ Show 20 Lines • Show All 446 Lines • Show Last 20 Lines |