From 656d872980d0a0491c8a7a612bafa153196fda18 Mon Sep 17 00:00:00 2001 From: Yage Hu Date: Thu, 14 Dec 2023 09:36:08 -0800 Subject: [PATCH] wasi: use proper param type for `size` in `fd_filestat_set_size` to handle EFBIG (#1871) Signed-off-by: Yage Hu --- imports/wasi_snapshot_preview1/fs.go | 4 ++-- imports/wasi_snapshot_preview1/fs_test.go | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/imports/wasi_snapshot_preview1/fs.go b/imports/wasi_snapshot_preview1/fs.go index 9d28ae17b0..384036a275 100644 --- a/imports/wasi_snapshot_preview1/fs.go +++ b/imports/wasi_snapshot_preview1/fs.go @@ -464,7 +464,7 @@ var fdFilestatSetSize = newHostFunc(wasip1.FdFilestatSetSizeName, fdFilestatSetS func fdFilestatSetSizeFn(_ context.Context, mod api.Module, params []uint64) experimentalsys.Errno { fd := int32(params[0]) - size := uint32(params[1]) + size := int64(params[1]) fsc := mod.(*wasm.ModuleInstance).Sys.FS() @@ -472,7 +472,7 @@ func fdFilestatSetSizeFn(_ context.Context, mod api.Module, params []uint64) exp if f, ok := fsc.LookupFile(fd); !ok { return experimentalsys.EBADF } else { - return f.File.Truncate(int64(size)) + return f.File.Truncate(size) } } diff --git a/imports/wasi_snapshot_preview1/fs_test.go b/imports/wasi_snapshot_preview1/fs_test.go index 6cae4d0d68..301ce6483e 100644 --- a/imports/wasi_snapshot_preview1/fs_test.go +++ b/imports/wasi_snapshot_preview1/fs_test.go @@ -835,7 +835,7 @@ func Test_fdFilestatSetSize(t *testing.T) { tests := []struct { name string - size uint32 + size uint64 content, expectedContent []byte expectedLog string expectedErrno wasip1.Errno @@ -881,6 +881,17 @@ func Test_fdFilestatSetSize(t *testing.T) { expectedLog: ` ==> wasi_snapshot_preview1.fd_filestat_set_size(fd=4,size=106) <== errno=ESUCCESS +`, + }, + { + name: "large size", + content: []byte(""), + expectedContent: []byte(""), + size: math.MaxUint64, + expectedErrno: wasip1.ErrnoInval, + expectedLog: ` +==> wasi_snapshot_preview1.fd_filestat_set_size(fd=4,size=-1) +<== errno=EINVAL `, }, }