aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-03-27 21:22:38 +0800
committerobscuren <geffobscura@gmail.com>2015-03-27 21:22:38 +0800
commit00f8319faf95e53333a9573fdc9e49df23238607 (patch)
tree224ce0c8f78f453e9cc283bba15905f6492cf90c /core
parenteb102bf4bb0bff773824ff467fbb2e49c1f6939b (diff)
downloadgo-tangerine-00f8319faf95e53333a9573fdc9e49df23238607.tar.gz
go-tangerine-00f8319faf95e53333a9573fdc9e49df23238607.tar.zst
go-tangerine-00f8319faf95e53333a9573fdc9e49df23238607.zip
Explicitly check memory's data store. #515
Diffstat (limited to 'core')
-rw-r--r--core/vm/memory.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/core/vm/memory.go b/core/vm/memory.go
index dd47fa1b5..f5984d82f 100644
--- a/core/vm/memory.go
+++ b/core/vm/memory.go
@@ -15,10 +15,17 @@ func NewMemory() *Memory {
}
func (m *Memory) Set(offset, size uint64, value []byte) {
+ // If the length of the store is 0 this is a complete failure
+ // memory size is set prior to calling this method so enough size
+ // should always be available.
+ if len(m.store) == 0 {
+ panic("INVALID memory: store empty")
+ }
+
value = common.RightPadBytes(value, int(size))
totSize := offset + size
- lenSize := uint64(len(m.store) - 1)
+ lenSize := int64(len(m.store) - 1)
if totSize > lenSize {
// Calculate the diff between the sizes
diff := totSize - lenSize