From 434285c0f9cd959dae4d5850e21aa9a99eeb65fc Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Tue, 26 Jan 2021 12:20:44 +0100 Subject: [PATCH 1/6] fix(c-api) Use uppercase enum variants for constants of `wasi_version_t`. --- lib/c-api/src/wasm_c_api/wasi/mod.rs | 24 ++++++++++++------------ lib/c-api/wasmer_wasm.h | 22 ++++++++++++++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/lib/c-api/src/wasm_c_api/wasi/mod.rs b/lib/c-api/src/wasm_c_api/wasi/mod.rs index 1ef66b35645..92b444554d8 100644 --- a/lib/c-api/src/wasm_c_api/wasi/mod.rs +++ b/lib/c-api/src/wasm_c_api/wasi/mod.rs @@ -268,18 +268,18 @@ fn read_inner(wasi_file: &mut Box, inner_buffer: &mut [u8]) -> isi #[repr(u32)] #[allow(non_camel_case_types)] pub enum wasi_version_t { - Latest = 0, - Snapshot0 = 1, - Snapshot1 = 2, - InvalidVersion = u32::max_value(), + LATEST = 0, + SNAPSHOT0 = 1, + SNAPSHOT1 = 2, + INVALID_VERSION = 4294967295, // u32::MAX, } impl From for wasi_version_t { fn from(other: WasiVersion) -> Self { match other { - WasiVersion::Snapshot0 => wasi_version_t::Snapshot0, - WasiVersion::Snapshot1 => wasi_version_t::Snapshot1, - WasiVersion::Latest => wasi_version_t::Latest, + WasiVersion::Snapshot0 => wasi_version_t::SNAPSHOT0, + WasiVersion::Snapshot1 => wasi_version_t::SNAPSHOT1, + WasiVersion::Latest => wasi_version_t::LATEST, } } } @@ -289,10 +289,10 @@ impl TryFrom for WasiVersion { fn try_from(other: wasi_version_t) -> Result { Ok(match other { - wasi_version_t::Snapshot0 => WasiVersion::Snapshot0, - wasi_version_t::Snapshot1 => WasiVersion::Snapshot1, - wasi_version_t::Latest => WasiVersion::Latest, - wasi_version_t::InvalidVersion => return Err("Invalid WASI version cannot be used"), + wasi_version_t::SNAPSHOT0 => WasiVersion::Snapshot0, + wasi_version_t::SNAPSHOT1 => WasiVersion::Snapshot1, + wasi_version_t::LATEST => WasiVersion::Latest, + wasi_version_t::INVALID_VERSION => return Err("Invalid WASI version cannot be used"), }) } } @@ -301,7 +301,7 @@ impl TryFrom for WasiVersion { pub unsafe extern "C" fn wasi_get_wasi_version(module: &wasm_module_t) -> wasi_version_t { get_wasi_version(&module.inner, false) .map(Into::into) - .unwrap_or(wasi_version_t::InvalidVersion) + .unwrap_or(wasi_version_t::INVALID_VERSION) } /// Takes ownership of `wasi_env_t`. diff --git a/lib/c-api/wasmer_wasm.h b/lib/c-api/wasmer_wasm.h index c4debd5abfe..3b24b3744c8 100644 --- a/lib/c-api/wasmer_wasm.h +++ b/lib/c-api/wasmer_wasm.h @@ -62,6 +62,24 @@ #include #include "wasm.h" +#if defined(WASMER_WASI_ENABLED) +enum wasi_version_t { +#if defined(WASMER_WASI_ENABLED) + LATEST = 0, +#endif +#if defined(WASMER_WASI_ENABLED) + SNAPSHOT0 = 1, +#endif +#if defined(WASMER_WASI_ENABLED) + SNAPSHOT1 = 2, +#endif +#if defined(WASMER_WASI_ENABLED) + INVALID_VERSION = 4294967295, +#endif +}; +typedef uint32_t wasi_version_t; +#endif + #if defined(WASMER_COMPILER_ENABLED) /** * Kind of compilers that can be used by the engines. @@ -120,10 +138,6 @@ typedef struct wasi_config_t wasi_config_t; typedef struct wasi_env_t wasi_env_t; #endif -#if defined(WASMER_WASI_ENABLED) -typedef struct wasi_version_t wasi_version_t; -#endif - #if defined(WASMER_WASI_ENABLED) void wasi_config_arg(wasi_config_t *config, const char *arg); #endif From af2b8d5923ad550983e43d4eccfcd419216fff4b Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Tue, 26 Jan 2021 13:19:04 +0100 Subject: [PATCH 2/6] doc(c-api) Document `wasi_version_t`. --- lib/c-api/src/wasm_c_api/wasi/mod.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/c-api/src/wasm_c_api/wasi/mod.rs b/lib/c-api/src/wasm_c_api/wasi/mod.rs index 92b444554d8..77873a2e4a5 100644 --- a/lib/c-api/src/wasm_c_api/wasi/mod.rs +++ b/lib/c-api/src/wasm_c_api/wasi/mod.rs @@ -264,13 +264,31 @@ fn read_inner(wasi_file: &mut Box, inner_buffer: &mut [u8]) -> isi } } +/// The version of WASI. This is determined by the imports namespace +/// string. #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(u32)] #[allow(non_camel_case_types)] pub enum wasi_version_t { + /// Latest version. + /// + /// It's a “floating” version, i.e. it's an alias to the latest + /// version (for the moment, `Snapshot1`). Using this version is a + /// way to ensure that modules will run only if they come with the + /// latest WASI version (in case of security issues for instance), + /// by just updating the runtime. + /// + /// Note that this version is never returned by an API. It is + /// provided only by the user. LATEST = 0, + + /// `wasi_unstable`. SNAPSHOT0 = 1, + + /// `wasi_snapshot_preview1`. SNAPSHOT1 = 2, + + /// An invalid version. It matches `u32` maximum value. INVALID_VERSION = 4294967295, // u32::MAX, } From 361ea40042ccf09240e6317e740207ccdb9d1a9b Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Tue, 26 Jan 2021 13:19:20 +0100 Subject: [PATCH 3/6] chore(c-api) Update headers. --- lib/c-api/wasmer_wasm.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/c-api/wasmer_wasm.h b/lib/c-api/wasmer_wasm.h index 3b24b3744c8..a755c952445 100644 --- a/lib/c-api/wasmer_wasm.h +++ b/lib/c-api/wasmer_wasm.h @@ -63,17 +63,42 @@ #include "wasm.h" #if defined(WASMER_WASI_ENABLED) +/** + * The version of WASI. This is determined by the imports namespace + * string. + */ enum wasi_version_t { #if defined(WASMER_WASI_ENABLED) + /** + * Latest version. + * + * It's a “floating” version, i.e. it's an alias to the latest + * version (for the moment, `Snapshot1`). Using this version is a + * way to ensure that modules will run only if they come with the + * latest WASI version (in case of security issues for instance), + * by just updating the runtime. + * + * Note that this version is never returned by an API. It is + * provided only by the user. + */ LATEST = 0, #endif #if defined(WASMER_WASI_ENABLED) + /** + * `wasi_unstable`. + */ SNAPSHOT0 = 1, #endif #if defined(WASMER_WASI_ENABLED) + /** + * `wasi_snapshot_preview1`. + */ SNAPSHOT1 = 2, #endif #if defined(WASMER_WASI_ENABLED) + /** + * An invalid version. It matches `u32` maximum value. + */ INVALID_VERSION = 4294967295, #endif }; From c576eb000f91a7f9d85116a8eb2a096dcb114e95 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Tue, 26 Jan 2021 13:19:31 +0100 Subject: [PATCH 4/6] chore(wasi) Fix coding style. --- lib/wasi/src/utils.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/wasi/src/utils.rs b/lib/wasi/src/utils.rs index bba0a3a2745..b5b088484d3 100644 --- a/lib/wasi/src/utils.rs +++ b/lib/wasi/src/utils.rs @@ -13,6 +13,7 @@ pub fn is_wasi_module(module: &Module) -> bool { pub enum WasiVersion { /// `wasi_unstable`. Snapshot0, + /// `wasi_snapshot_preview1`. Snapshot1, From 343e0ae241cacfe5ccfbbe24c77207ad412a5d56 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Tue, 26 Jan 2021 13:20:24 +0100 Subject: [PATCH 5/6] doc(changelog) Add #2058. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ca60668f9..a03ffacb76f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - [#2056](https://github.com/wasmerio/wasmer/pull/2056) Change back to depend on the `enumset` crate instead of `wasmer_enumset` ### Fixed +- [#2058](https://github.com/wasmerio/wasmer/pull/2058) `wasm_version_t` wasn't bound correctly to C. - [#2044](https://github.com/wasmerio/wasmer/pull/2044) Do not build C headers on docs.rs. ## 1.0.1 - 2021-01-12 From 276537a00f1da60cd1cab84fc5b4992817a9179d Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Wed, 27 Jan 2021 11:27:22 +0100 Subject: [PATCH 6/6] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a03ffacb76f..35a4b107056 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ - [#2056](https://github.com/wasmerio/wasmer/pull/2056) Change back to depend on the `enumset` crate instead of `wasmer_enumset` ### Fixed -- [#2058](https://github.com/wasmerio/wasmer/pull/2058) `wasm_version_t` wasn't bound correctly to C. +- [#2058](https://github.com/wasmerio/wasmer/pull/2058) Expose WASI versions to C correctly. - [#2044](https://github.com/wasmerio/wasmer/pull/2044) Do not build C headers on docs.rs. ## 1.0.1 - 2021-01-12