diff --git a/vmhost/contexts/runtime.go b/vmhost/contexts/runtime.go index c55e2452..1ec571aa 100644 --- a/vmhost/contexts/runtime.go +++ b/vmhost/contexts/runtime.go @@ -1086,10 +1086,13 @@ func (context *runtimeContext) MemLoad(offset int32, length int32) ([]byte, erro return nil, fmt.Errorf("mem load: %w", vmhost.ErrNegativeLength) } - result := make([]byte, length) + var result []byte + if isRequestedEndTooLarge { + result = make([]byte, memoryLength-uint32(offset)) copy(result, memoryView[offset:]) } else { + result = make([]byte, requestedEnd-offset) copy(result, memoryView[offset:requestedEnd]) } diff --git a/vmhost/contexts/runtime_test.go b/vmhost/contexts/runtime_test.go index 581c0574..0e48a34b 100644 --- a/vmhost/contexts/runtime_test.go +++ b/vmhost/contexts/runtime_test.go @@ -638,7 +638,7 @@ func TestRuntimeContext_MemLoadCases(t *testing.T) { length = 9 memContents, err = runtimeContext.MemLoad(offset, length) require.Nil(t, err) - require.Equal(t, []byte{'e', 's', 't', ' ', 'd', 'a', 't', 'a', 0}, memContents) + require.Equal(t, []byte{'e', 's', 't', ' ', 'd', 'a', 't', 'a'}, memContents) // Zero length offset = int32(memory.Length() - 8)