From a22056db5988bfa2b1354e0092eabb734c30701c Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Mon, 1 Dec 2014 20:49:56 +0100
Subject: [PATCH] Make an attempt to pay for the gas prior to expanding the
 mem.

---
 tests/vm/gh_test.go | 5 ++++-
 vm/closure.go       | 2 +-
 vm/vm_debug.go      | 3 ++-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go
index 7d98983e7..bd107249b 100644
--- a/tests/vm/gh_test.go
+++ b/tests/vm/gh_test.go
@@ -2,6 +2,7 @@ package vm
 
 import (
 	"bytes"
+	"fmt"
 	"testing"
 
 	"github.com/ethereum/go-ethereum/ethutil"
@@ -44,6 +45,7 @@ func RunVmTest(p string, t *testing.T) {
 	helper.CreateFileTests(t, p, &tests)
 
 	for name, test := range tests {
+		fmt.Println(name)
 		state := state.New(helper.NewTrie())
 		for addr, account := range test.Pre {
 			obj := StateObjectFromAccount(addr, account)
@@ -113,7 +115,7 @@ func TestEnvironmentalInfo(t *testing.T) {
 }
 
 func TestFlowOperation(t *testing.T) {
-	helper.Logger.SetLogLevel(5)
+	//helper.Logger.SetLogLevel(5)
 	const fn = "../files/vmtests/vmIOandFlowOperationsTest.json"
 	RunVmTest(fn, t)
 }
@@ -124,6 +126,7 @@ func TestPushDupSwap(t *testing.T) {
 }
 
 func TestVMSha3(t *testing.T) {
+	helper.Logger.SetLogLevel(5)
 	const fn = "../files/vmtests/vmSha3Test.json"
 	RunVmTest(fn, t)
 }
diff --git a/vm/closure.go b/vm/closure.go
index ef9bbca93..5bd8c1bb8 100644
--- a/vm/closure.go
+++ b/vm/closure.go
@@ -64,7 +64,7 @@ func (c *Closure) GetOp(x int) OpCode {
 }
 
 func (c *Closure) GetByte(x int) byte {
-	if x < len(c.Code) {
+	if x > -1 && x < len(c.Code) {
 		return c.Code[x]
 	}
 
diff --git a/vm/vm_debug.go b/vm/vm_debug.go
index b9c1d4bc6..4daa3ab5b 100644
--- a/vm/vm_debug.go
+++ b/vm/vm_debug.go
@@ -277,7 +277,6 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
 
 				addStepGasUsage(memGasUsage)
 
-				mem.Resize(newMemSize.Uint64())
 			}
 
 		}
@@ -295,6 +294,8 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
 			return closure.Return(nil), OOG(gas, tmp)
 		}
 
+		mem.Resize(newMemSize.Uint64())
+
 		switch op {
 		// 0x20 range
 		case ADD:
-- 
GitLab