Skip to content

Commit

Permalink
[CRE-42] Fix partial or truncated writes (#989)
Browse files Browse the repository at this point in the history
* fix: check size and len(src) match to avoid partial or truncated writes

* fix: return the number of bytes copied

* chore: align test naming
  • Loading branch information
agparadiso authored Jan 10, 2025
1 parent 0f838d5 commit 7dbb1b0
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
8 changes: 5 additions & 3 deletions pkg/workflows/wasm/host/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -728,11 +728,13 @@ func write(memory, src []byte, ptr, size int32) int64 {
return -1
}

if len(src) != int(size) {
return -1
}

if int32(len(memory)) < ptr+size {
return -1
}
buffer := memory[ptr : ptr+size]
dataLen := int64(len(src))
copy(buffer, src)
return dataLen
return int64(copy(buffer, src))
}
20 changes: 17 additions & 3 deletions pkg/workflows/wasm/host/module_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -565,17 +565,31 @@ func Test_write(t *testing.T) {
giveSrc := []byte("hello, world")
memory := make([]byte, len(giveSrc)-1)
n := write(memory, giveSrc, 0, int32(len(giveSrc)))
assert.Equal(t, n, int64(-1))
assert.Equal(t, int64(-1), n)
})

t.Run("fails to write to invalid access", func(t *testing.T) {
giveSrc := []byte("hello, world")
memory := make([]byte, len(giveSrc))
n := write(memory, giveSrc, 0, -1)
assert.Equal(t, n, int64(-1))
assert.Equal(t, int64(-1), n)

n = write(memory, giveSrc, -1, 1)
assert.Equal(t, n, int64(-1))
assert.Equal(t, int64(-1), n)
})

t.Run("truncated write due to size being smaller than len", func(t *testing.T) {
giveSrc := []byte("hello, world")
memory := make([]byte, 12)
n := write(memory, giveSrc, 0, int32(len(giveSrc)-2))
assert.Equal(t, int64(-1), n)
})

t.Run("unwanted data when size exceeds written data", func(t *testing.T) {
giveSrc := []byte("hello, world")
memory := make([]byte, 20)
n := write(memory, giveSrc, 0, 20)
assert.Equal(t, int64(-1), n)
})
}

Expand Down

0 comments on commit 7dbb1b0

Please sign in to comment.