diff --git a/config.go b/config.go index 4f7d0fd5..df4fa8f3 100644 --- a/config.go +++ b/config.go @@ -667,7 +667,11 @@ func (c *moduleConfig) WithEnv(key, value string) ModuleConfig { // WithFS implements ModuleConfig.WithFS func (c *moduleConfig) WithFS(fs fs.FS) ModuleConfig { - return c.WithFSConfig(NewFSConfig().WithFSMount(fs, "")) + var config FSConfig + if fs != nil { + config = NewFSConfig().WithFSMount(fs, "") + } + return c.WithFSConfig(config) } // WithFSConfig implements ModuleConfig.WithFSConfig diff --git a/config_test.go b/config_test.go index 24aa19ef..1174669f 100644 --- a/config_test.go +++ b/config_test.go @@ -360,6 +360,24 @@ func TestModuleConfig_toSysContext(t *testing.T) { sysfs.Adapt(testFS2), // fs ), }, + { + name: "WithFS nil", + input: base.WithFS(nil), + expected: requireSysContext(t, + math.MaxUint32, // max + nil, // args + nil, // environ + nil, // stdin + nil, // stdout + nil, // stderr + nil, // randSource + &wt, 1, // walltime, walltimeResolution + &nt, 1, // nanotime, nanotimeResolution + nil, // nanosleep + nil, // osyield + nil, // fs + ), + }, { name: "WithRandSource", input: base.WithRandSource(rand.Reader), diff --git a/fsconfig_test.go b/fsconfig_test.go index 144b1f87..b114dafe 100644 --- a/fsconfig_test.go +++ b/fsconfig_test.go @@ -35,6 +35,11 @@ func TestFSConfig(t *testing.T) { input: base.WithFSMount(testFS, "/").WithFSMount(testFS2, "/"), expected: sysfs.Adapt(testFS2), }, + { + name: "WithFsMount nil", + input: base.WithFSMount(nil, "/"), + expected: sysfs.UnimplementedFS{}, + }, { name: "WithDirMount overwrites", input: base.WithFSMount(testFS, "/").WithDirMount(".", "/"), diff --git a/internal/sysfs/adapter.go b/internal/sysfs/adapter.go index dda320ba..9c0dfa3a 100644 --- a/internal/sysfs/adapter.go +++ b/internal/sysfs/adapter.go @@ -19,6 +19,9 @@ import ( // documentation does not require the file to be present. In summary, we can't // enforce flag behavior. func Adapt(fs fs.FS) FS { + if fs == nil { + return UnimplementedFS{} + } if sys, ok := fs.(FS); ok { return sys } diff --git a/internal/sysfs/adapter_test.go b/internal/sysfs/adapter_test.go index 008ef4f0..b877d7d9 100644 --- a/internal/sysfs/adapter_test.go +++ b/internal/sysfs/adapter_test.go @@ -14,6 +14,12 @@ import ( "github.com/tetratelabs/wazero/internal/testing/require" ) +func TestAdapt_nil(t *testing.T) { + testFS := Adapt(nil) + _, ok := testFS.(UnimplementedFS) + require.True(t, ok) +} + func TestAdapt_String(t *testing.T) { testFS := Adapt(os.DirFS(".")) require.Equal(t, ".", testFS.String())