From edc3e5d056709051aa80c34fd6c6a8073c5b4449 Mon Sep 17 00:00:00 2001 From: "Node.js GitHub Bot" Date: Sun, 5 May 2024 00:26:09 +0000 Subject: [PATCH] deps: update uvwasi to 0.0.21 PR-URL: https://github.com/nodejs/node/pull/52863 Reviewed-By: Guy Bedford Reviewed-By: Luigi Pinca --- deps/uvwasi/include/uvwasi.h | 2 +- deps/uvwasi/src/path_resolver.c | 2 +- deps/uvwasi/src/uvwasi.c | 43 +++++++++++++++++++++++++---- test/wasi/c/create_symlink.c | 2 +- test/wasi/wasm/create_symlink.wasm | Bin 33221 -> 32327 bytes 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/deps/uvwasi/include/uvwasi.h b/deps/uvwasi/include/uvwasi.h index 752c3ba3958e7c..7dbcc667793a07 100644 --- a/deps/uvwasi/include/uvwasi.h +++ b/deps/uvwasi/include/uvwasi.h @@ -11,7 +11,7 @@ extern "C" { #define UVWASI_VERSION_MAJOR 0 #define UVWASI_VERSION_MINOR 0 -#define UVWASI_VERSION_PATCH 20 +#define UVWASI_VERSION_PATCH 21 #define UVWASI_VERSION_HEX ((UVWASI_VERSION_MAJOR << 16) | \ (UVWASI_VERSION_MINOR << 8) | \ (UVWASI_VERSION_PATCH)) diff --git a/deps/uvwasi/src/path_resolver.c b/deps/uvwasi/src/path_resolver.c index ec8946b1393d74..deb3f603821f92 100644 --- a/deps/uvwasi/src/path_resolver.c +++ b/deps/uvwasi/src/path_resolver.c @@ -269,7 +269,7 @@ static uvwasi_errno_t uvwasi__normalize_relative_path( normalized. */ uvwasi_errno_t err; char* combined; - char* normalized; + char* normalized = NULL; uvwasi_size_t combined_len; uvwasi_size_t fd_path_len; uvwasi_size_t norm_len; diff --git a/deps/uvwasi/src/uvwasi.c b/deps/uvwasi/src/uvwasi.c index 40162f886fa224..948c1355c9ccf7 100644 --- a/deps/uvwasi/src/uvwasi.c +++ b/deps/uvwasi/src/uvwasi.c @@ -1158,7 +1158,7 @@ uvwasi_errno_t uvwasi_fd_pread(uvwasi_t* uvwasi, offset, nread); - if (uvwasi == NULL || iovs == NULL || nread == NULL) + if (uvwasi == NULL || (iovs == NULL && iovs_len > 0) || nread == NULL || offset > INT64_MAX) return UVWASI_EINVAL; err = uvwasi_fd_table_get(uvwasi->fds, @@ -1169,6 +1169,14 @@ uvwasi_errno_t uvwasi_fd_pread(uvwasi_t* uvwasi, if (err != UVWASI_ESUCCESS) return err; + // libuv returns EINVAL in this case. To behave consistently with other + // Wasm runtimes, return OK here with a no-op. + if (iovs_len == 0) { + uv_mutex_unlock(&wrap->mutex); + *nread = 0; + return UVWASI_ESUCCESS; + } + err = uvwasi__setup_iovs(uvwasi, &bufs, iovs, iovs_len); if (err != UVWASI_ESUCCESS) { uv_mutex_unlock(&wrap->mutex); @@ -1282,7 +1290,7 @@ uvwasi_errno_t uvwasi_fd_pwrite(uvwasi_t* uvwasi, offset, nwritten); - if (uvwasi == NULL || iovs == NULL || nwritten == NULL) + if (uvwasi == NULL || (iovs == NULL && iovs_len > 0) || nwritten == NULL || offset > INT64_MAX) return UVWASI_EINVAL; err = uvwasi_fd_table_get(uvwasi->fds, @@ -1293,6 +1301,14 @@ uvwasi_errno_t uvwasi_fd_pwrite(uvwasi_t* uvwasi, if (err != UVWASI_ESUCCESS) return err; + // libuv returns EINVAL in this case. To behave consistently with other + // Wasm runtimes, return OK here with a no-op. + if (iovs_len == 0) { + uv_mutex_unlock(&wrap->mutex); + *nwritten = 0; + return UVWASI_ESUCCESS; + } + err = uvwasi__setup_ciovs(uvwasi, &bufs, iovs, iovs_len); if (err != UVWASI_ESUCCESS) { uv_mutex_unlock(&wrap->mutex); @@ -1332,14 +1348,21 @@ uvwasi_errno_t uvwasi_fd_read(uvwasi_t* uvwasi, iovs, iovs_len, nread); - - if (uvwasi == NULL || iovs == NULL || nread == NULL) + if (uvwasi == NULL || (iovs == NULL && iovs_len > 0) || nread == NULL) return UVWASI_EINVAL; err = uvwasi_fd_table_get(uvwasi->fds, fd, &wrap, UVWASI_RIGHT_FD_READ, 0); if (err != UVWASI_ESUCCESS) return err; + // libuv returns EINVAL in this case. To behave consistently with other + // Wasm runtimes, return OK here with a no-op. + if (iovs_len == 0) { + uv_mutex_unlock(&wrap->mutex); + *nread = 0; + return UVWASI_ESUCCESS; + } + err = uvwasi__setup_iovs(uvwasi, &bufs, iovs, iovs_len); if (err != UVWASI_ESUCCESS) { uv_mutex_unlock(&wrap->mutex); @@ -1634,13 +1657,21 @@ uvwasi_errno_t uvwasi_fd_write(uvwasi_t* uvwasi, iovs_len, nwritten); - if (uvwasi == NULL || iovs == NULL || nwritten == NULL) + if (uvwasi == NULL || (iovs == NULL && iovs_len > 0) || nwritten == NULL) return UVWASI_EINVAL; err = uvwasi_fd_table_get(uvwasi->fds, fd, &wrap, UVWASI_RIGHT_FD_WRITE, 0); if (err != UVWASI_ESUCCESS) return err; + // libuv returns EINVAL in this case. To behave consistently with other + // Wasm runtimes, return OK here with a no-op. + if (iovs_len == 0) { + uv_mutex_unlock(&wrap->mutex); + *nwritten = 0; + return UVWASI_ESUCCESS; + } + err = uvwasi__setup_ciovs(uvwasi, &bufs, iovs, iovs_len); if (err != UVWASI_ESUCCESS) { uv_mutex_unlock(&wrap->mutex); @@ -2168,7 +2199,7 @@ uvwasi_errno_t uvwasi_path_readlink(uvwasi_t* uvwasi, memcpy(buf, req.ptr, len); buf[len] = '\0'; - *bufused = len + 1; + *bufused = len; uv_fs_req_cleanup(&req); return UVWASI_ESUCCESS; } diff --git a/test/wasi/c/create_symlink.c b/test/wasi/c/create_symlink.c index 319b10c6909781..bf9d804753c1dc 100644 --- a/test/wasi/c/create_symlink.c +++ b/test/wasi/c/create_symlink.c @@ -11,7 +11,7 @@ int main() { assert(0 == symlink(target, linkpath)); assert(readlink(linkpath, readlink_result, result_size) == - strlen(target) + 1); + strlen(target)); assert(0 == strcmp(readlink_result, target)); FILE* file = fopen(linkpath, "r"); diff --git a/test/wasi/wasm/create_symlink.wasm b/test/wasi/wasm/create_symlink.wasm index 64e120cd5a617bfe25d5d8d2f4221f2859ad8ef5..be824359be63723edc6aced6a2c1676cf1a337eb 100755 GIT binary patch literal 32327 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 z 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