fixed stack level

This commit is contained in:
obscuren 2015-04-03 11:27:56 +02:00
parent fd5c5b2969
commit c59c826ab4
3 changed files with 32 additions and 6 deletions

@ -85,9 +85,6 @@
function refresh() { function refresh() {
document.querySelector("#balance").innerHTML = contract.call({from:eth.coinbase}).balance(eth.coinbase); document.querySelector("#balance").innerHTML = contract.call({from:eth.coinbase}).balance(eth.coinbase);
var table = document.querySelector("#table_body");
table.innerHTML = ""; // clear
} }
function transact() { function transact() {

@ -2,8 +2,9 @@ package vm
import ( import (
"fmt" "fmt"
"github.com/ethereum/go-ethereum/params"
"math/big" "math/big"
"github.com/ethereum/go-ethereum/params"
) )
var ( var (
@ -37,8 +38,8 @@ func baseCheck(op OpCode, stack *stack, gas *big.Int) error {
return err return err
} }
if r.stackPush && len(stack.data)-r.stackPop+1 > int(params.StackLimit.Int64()) { if r.stackPush && len(stack.data)-r.stackPop > int(params.StackLimit.Int64()) {
return fmt.Errorf("stack limit reached (%d)", params.StackLimit.Int64()) return fmt.Errorf("stack limit reached %d (%d)", len(stack.data), params.StackLimit.Int64())
} }
gas.Add(gas, r.gas) gas.Add(gas, r.gas)

@ -81,6 +81,13 @@ func RunVmTest(p string, t *testing.T) {
helper.CreateFileTests(t, p, &tests) helper.CreateFileTests(t, p, &tests)
for name, test := range tests { for name, test := range tests {
/*
vm.Debug = true
helper.Logger.SetLogLevel(5)
if name != "Call1MB1024Calldepth" {
continue
}
*/
db, _ := ethdb.NewMemDatabase() db, _ := ethdb.NewMemDatabase()
statedb := state.New(common.Hash{}, db) statedb := state.New(common.Hash{}, db)
for addr, account := range test.Pre { for addr, account := range test.Pre {
@ -311,3 +318,24 @@ func TestStateTransaction(t *testing.T) {
const fn = "../files/StateTests/stTransactionTest.json" const fn = "../files/StateTests/stTransactionTest.json"
RunVmTest(fn, t) RunVmTest(fn, t)
} }
func TestCallCreateCallCode(t *testing.T) {
const fn = "../files/StateTests/stCallCreateCallCodeTest.json"
RunVmTest(fn, t)
}
func TestMemory(t *testing.T) {
const fn = "../files/StateTests/stMemoryTest.json"
RunVmTest(fn, t)
}
func TestQuadraticComplexity(t *testing.T) {
t.Skip() // takes too long
const fn = "../files/StateTests/stQuadraticComplexityTest.json"
RunVmTest(fn, t)
}
func TestSolidity(t *testing.T) {
const fn = "../files/StateTests/stSolidityTest.json"
RunVmTest(fn, t)
}