Skip to content

Commit

Permalink
limit array size in SYSCALLs
Browse files Browse the repository at this point in the history
  • Loading branch information
erikzhang committed Sep 13, 2018
1 parent 9660630 commit 8ba66e5
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion neo/SmartContract/StateReader.cs
Expand Up @@ -773,6 +773,8 @@ protected virtual bool Transaction_GetAttributes(ExecutionEngine engine)
{
Transaction tx = _interface.GetInterface<Transaction>();
if (tx == null) return false;
if (tx.Attributes.Length > ApplicationEngine.MaxArraySize)
return false;
engine.CurrentContext.EvaluationStack.Push(tx.Attributes.Select(p => StackItem.FromInterface(p)).ToArray());
return true;
}
Expand All @@ -785,6 +787,8 @@ protected virtual bool Transaction_GetInputs(ExecutionEngine engine)
{
Transaction tx = _interface.GetInterface<Transaction>();
if (tx == null) return false;
if (tx.Inputs.Length > ApplicationEngine.MaxArraySize)
return false;
engine.CurrentContext.EvaluationStack.Push(tx.Inputs.Select(p => StackItem.FromInterface(p)).ToArray());
return true;
}
Expand All @@ -797,6 +801,8 @@ protected virtual bool Transaction_GetOutputs(ExecutionEngine engine)
{
Transaction tx = _interface.GetInterface<Transaction>();
if (tx == null) return false;
if (tx.Outputs.Length > ApplicationEngine.MaxArraySize)
return false;
engine.CurrentContext.EvaluationStack.Push(tx.Outputs.Select(p => StackItem.FromInterface(p)).ToArray());
return true;
}
Expand All @@ -809,6 +815,8 @@ protected virtual bool Transaction_GetReferences(ExecutionEngine engine)
{
Transaction tx = _interface.GetInterface<Transaction>();
if (tx == null) return false;
if (tx.Inputs.Length > ApplicationEngine.MaxArraySize)
return false;
engine.CurrentContext.EvaluationStack.Push(tx.Inputs.Select(p => StackItem.FromInterface(tx.References[p])).ToArray());
return true;
}
Expand All @@ -821,7 +829,10 @@ protected virtual bool Transaction_GetUnspentCoins(ExecutionEngine engine)
{
Transaction tx = _interface.GetInterface<Transaction>();
if (tx == null) return false;
engine.CurrentContext.EvaluationStack.Push(Blockchain.Default.GetUnspent(tx.Hash).Select(p => StackItem.FromInterface(p)).ToArray());
TransactionOutput[] outputs = Blockchain.Default.GetUnspent(tx.Hash).ToArray();
if (outputs.Length > ApplicationEngine.MaxArraySize)
return false;
engine.CurrentContext.EvaluationStack.Push(outputs.Select(p => StackItem.FromInterface(p)).ToArray());
return true;
}
return false;
Expand Down

0 comments on commit 8ba66e5

Please sign in to comment.