Skip to content

Commit

Permalink
script: remove code for disallowed ops
Browse files Browse the repository at this point in the history
  • Loading branch information
div72 committed Oct 8, 2023
1 parent d4a322e commit 81b4123
Showing 1 changed file with 0 additions and 144 deletions.
144 changes: 0 additions & 144 deletions src/script.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -673,65 +673,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, co
}
break;


//
// Splice ops
//
case OP_CAT:
{
// (x1 x2 -- out)
if (stack.size() < 2)
return false;
valtype& vch1 = stacktop(-2);
valtype& vch2 = stacktop(-1);
vch1.insert(vch1.end(), vch2.begin(), vch2.end());
popstack(stack);
if (stacktop(-1).size() > MAX_SCRIPT_ELEMENT_SIZE)
return false;
}
break;

case OP_SUBSTR:
{
// (in begin size -- out)
if (stack.size() < 3)
return false;
valtype& vch = stacktop(-3);
int nBegin = CastToBigNum(stacktop(-2)).getint();
int nEnd = nBegin + CastToBigNum(stacktop(-1)).getint();
if (nBegin < 0 || nEnd < nBegin)
return false;
if (nBegin > (int)vch.size())
nBegin = vch.size();
if (nEnd > (int)vch.size())
nEnd = vch.size();
vch.erase(vch.begin() + nEnd, vch.end());
vch.erase(vch.begin(), vch.begin() + nBegin);
popstack(stack);
popstack(stack);
}
break;

case OP_LEFT:
case OP_RIGHT:
{
// (in size -- out)
if (stack.size() < 2)
return false;
valtype& vch = stacktop(-2);
int nSize = CastToBigNum(stacktop(-1)).getint();
if (nSize < 0)
return false;
if (nSize > (int)vch.size())
nSize = vch.size();
if (opcode == OP_LEFT)
vch.erase(vch.begin() + nSize, vch.end());
else
vch.erase(vch.begin(), vch.end() - nSize);
popstack(stack);
}
break;

case OP_SIZE:
{
// (in -- in size)
Expand All @@ -742,55 +683,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, co
}
break;


//
// Bitwise logic
//
case OP_INVERT:
{
// (in - out)
if (stack.size() < 1)
return false;
valtype& vch = stacktop(-1);
for (unsigned int i = 0; i < vch.size(); i++)
vch[i] = ~vch[i];
}
break;

//
// WARNING: These disabled opcodes exhibit unexpected behavior
// when used on signed integers due to a bug in MakeSameSize()
// [see definition of MakeSameSize() above].
//
case OP_AND:
case OP_OR:
case OP_XOR:
{
// (x1 x2 - out)
if (stack.size() < 2)
return false;
valtype& vch1 = stacktop(-2);
valtype& vch2 = stacktop(-1);
MakeSameSize(vch1, vch2); // <-- NOT SAFE FOR SIGNED VALUES
if (opcode == OP_AND)
{
for (unsigned int i = 0; i < vch1.size(); i++)
vch1[i] &= vch2[i];
}
else if (opcode == OP_OR)
{
for (unsigned int i = 0; i < vch1.size(); i++)
vch1[i] |= vch2[i];
}
else if (opcode == OP_XOR)
{
for (unsigned int i = 0; i < vch1.size(); i++)
vch1[i] ^= vch2[i];
}
popstack(stack);
}
break;

case OP_EQUAL:
case OP_EQUALVERIFY:
//case OP_NOTEQUAL: // use OP_NUMNOTEQUAL
Expand Down Expand Up @@ -825,8 +717,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, co
//
case OP_1ADD:
case OP_1SUB:
case OP_2MUL:
case OP_2DIV:
case OP_NEGATE:
case OP_ABS:
case OP_NOT:
Expand All @@ -840,8 +730,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, co
{
case OP_1ADD: bn += bnOne; break;
case OP_1SUB: bn -= bnOne; break;
case OP_2MUL: bn <<= 1; break;
case OP_2DIV: bn >>= 1; break;
case OP_NEGATE: bn = -bn; break;
case OP_ABS: if (bn < bnZero) bn = -bn; break;
case OP_NOT: bn = (bn == bnZero); break;
Expand All @@ -855,11 +743,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, co

case OP_ADD:
case OP_SUB:
case OP_MUL:
case OP_DIV:
case OP_MOD:
case OP_LSHIFT:
case OP_RSHIFT:
case OP_BOOLAND:
case OP_BOOLOR:
case OP_NUMEQUAL:
Expand Down Expand Up @@ -888,33 +771,6 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, co
bn = bn1 - bn2;
break;

case OP_MUL:
if (!BN_mul(&bn, &bn1, &bn2, pctx))
return false;
break;

case OP_DIV:
if (!BN_div(&bn, nullptr, &bn1, &bn2, pctx))
return false;
break;

case OP_MOD:
if (!BN_mod(&bn, &bn1, &bn2, pctx))
return false;
break;

case OP_LSHIFT:
if (bn2 < bnZero || bn2 > CBigNum(2048))
return false;
bn = bn1 << bn2.getulong();
break;

case OP_RSHIFT:
if (bn2 < bnZero || bn2 > CBigNum(2048))
return false;
bn = bn1 >> bn2.getulong();
break;

case OP_BOOLAND: bn = (bn1 != bnZero && bn2 != bnZero); break;
case OP_BOOLOR: bn = (bn1 != bnZero || bn2 != bnZero); break;
case OP_NUMEQUAL: bn = (bn1 == bn2); break;
Expand Down

0 comments on commit 81b4123

Please sign in to comment.