Node: WASI not working on Windows

Created on 22 Jan 2020  路  13Comments  路  Source: nodejs/node

  • Version: 13.7.0
  • Platform: Windows 10 1903 x64
  • Subsystem: wasi

WASI preopen option fails on Windows, but works on Linux (including Linux subsystem on Windows in the same dir).

In the simplest case, to reproduce the issue open REPL with node --experimental-wasi-unstable-preview1 in any directory and try to construct a WASI object:

> process.cwd()
'C:\\Users\\rreverser\\Projects'
> const {WASI} = require('wasi')
undefined
> (node:18424) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time

> new WASI({ env: {}, args: [], preopens: { '/sandbox': process.cwd() } })
Uncaught Error: UVWASI_EISDIR, uvwasi_init
    at new WASI (wasi.js:59:18) {
  errno: 31,
  code: 'UVWASI_EISDIR',
  syscall: 'uvwasi_init'
}

Same error can be seen in a real code, too.

Most helpful comment

Proposed fix in https://github.com/cjihrig/uvwasi/pull/92.

I guess this wasn't detected by the CI because stdin isn't a TTY in the CI. I was able to get a Windows 10 environment setup, reproduced the issue, and was able to get all of the Node WASI tests passing with that patch. I also verified that the REPL example from the OP worked as expected.

All 13 comments

Out of curiosity, do the Node WASI tests pass on your machine? We do test preopens here.

actually, it crashes on my Windows10 and success on Ubuntu WSL with the same node version 13.7.0 馃

Out of curiosity, do the Node WASI tests

That might take some more time to set up... Or can I just run tests via locally installed Node?

@RReverser you should be able to run node ./test-wasi.js from that directory. On macOS, that works with node 13.7.0. I don't have a Windows setup at the moment, so I haven't been able to test at all on Windows and have been relying on the CI, which passes.

@Himself65 do you mean node ./test-wasi.js fails on your Windows machine?

C:\Users\Himself65\Desktop\github\node\test\wasi>node -v
v13.7.0

C:\Users\Himself65\Desktop\github\node\test\wasi>node ./test-wasi.js
executing cant_dotdot
(node:8064) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69720)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69720)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69720)
environ_sizes_get(69724, 69720)
environ_get(134432, 131168)
fd_fdstat_get(3, 69672)
path_open(3, 1, 1033, 14, 0, 264240830, 268435455, 0, 69668)

executing clock_getres
(node:26608) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69688)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69688)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69688)
environ_sizes_get(69692, 69688)
environ_get(134432, 131168)
clock_res_get(0, 69656)
clock_res_get(1, 69656)
clock_res_get(2, 69656)
clock_res_get(3, 69656)

executing exitcode
(node:14784) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 67080)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 67080)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 67080)
environ_sizes_get(67084, 67080)
environ_get(134432, 131168)
proc_exit(120)

executing fd_prestat_get_refresh
(node:20788) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 67080)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 67080)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 67080)
environ_sizes_get(67084, 67080)
environ_get(134432, 131168)
fd_fdstat_get(1, 67048)
fd_fdstat_get(1, 67048)

executing getentropy
(node:19848) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69656)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69656)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69656)
environ_sizes_get(69660, 69656)
environ_get(134432, 131168)
random_get(69392, 256)

executing getrusage
(node:11104) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69688)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69688)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69688)
environ_sizes_get(69692, 69688)
environ_get(134432, 131168)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)

executing gettimeofday
(node:25956) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69688)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69688)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69688)
environ_sizes_get(69692, 69688)
environ_get(134432, 131168)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)

executing notdir
(node:5588) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69704)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69704)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69704)
environ_sizes_get(69708, 69704)
environ_get(134432, 131168)
fd_fdstat_get(3, 69656)
path_open(3, 1, 1033, 7, 2, 264240830, 268435455, 4, 69652)

executing preopen_populates
(node:20044) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 67080)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 67080)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 67080)
environ_sizes_get(67084, 67080)
environ_get(134432, 131168)

executing read_file
(node:5656) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 70888)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 70888)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 70888)
environ_sizes_get(70892, 70888)
environ_get(134432, 131168)
fd_fdstat_get(3, 70840)
path_open(3, 1, 1033, 9, 0, 264240830, 268435455, 0, 70836)
fd_read(5, 70840, 1, 70836)
fd_fdstat_get(1, 70840)
fd_write(1, 70848, 2, 70844)
fd_read(5, 70840, 1, 70836)

executing read_file_twice
(node:4392) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 70888)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 70888)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 70888)
environ_sizes_get(70892, 70888)
environ_get(134432, 131168)
fd_fdstat_get(3, 70824)
path_open(3, 1, 1033, 9, 0, 264240830, 268435455, 0, 70820)
fd_read(5, 70824, 1, 70820)
fd_fdstat_get(1, 70824)
fd_write(1, 70832, 2, 70828)
fd_read(5, 70824, 1, 70820)
fd_fdstat_get(3, 70824)
path_open(3, 1, 1033, 9, 0, 264240830, 268435455, 0, 70820)
fd_read(6, 70824, 1, 70820)
fd_read(6, 70824, 1, 70820)
fd_write(1, 70880, 2, 70876)

executing stat
(node:6128) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69832)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69832)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69832)
environ_sizes_get(69836, 69832)
environ_get(134432, 131168)
path_create_directory(4, 1029, 7)
fd_fdstat_get(4, 69592)
path_open(4, 1, 1065, 18, 1, 268419069, 268435455, 0, 69588)
fd_seek(5, 499, 0, 69624)
fd_write(5, 69624, 1, 69620)
fd_filestat_get(5, 69536)
fd_close(5)
path_filestat_get(4, 1065, 18, 8252232, 8252232)
fd_fdstat_get(4, 69528)
path_filestat_get(4, 1065, 18, -2080521144, 1722233688)
path_unlink_file(4, 1065, 18)
path_filestat_get(4, 1065, 18, 1750698400, 1750561056)
path_filestat_get(4, 1029, 7, 8252176, -383254528)
path_remove_directory(4, 1029, 7)
path_filestat_get(4, 1029, 7, 1750698400, 1750561056)

executing write_file
(node:11052) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69752)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69752)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69752)
environ_sizes_get(69756, 69752)
environ_get(134432, 131168)
fd_fdstat_get(4, 69688)
path_open(4, 1, 1029, 10, 9, 268419069, 268435455, 0, 69684)
fd_fdstat_get(5, 69672)
fd_write(5, 69712, 2, 69708)
fd_close(5)
C:\Users\Himself65\Desktop\github\node\test\wasi>node --experimental-wasi-unstable-preview1 ./test-wasi-options-validation.js
wasi.js:59
    const wrap = new _WASI(args, envPairs, preopenArray);
                 ^

Error: UVWASI_EISDIR, uvwasi_init
?[90m    at new WASI (wasi.js:59:18)?[39m
    at Object.<anonymous> (C:\Users\Himself65\Desktop\github\node\test\wasi\test-wasi-options-validation.js:10:1)
?[90m    at Module._compile (internal/modules/cjs/loader.js:1151:30)?[39m
?[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)?[39m
?[90m    at Module.load (internal/modules/cjs/loader.js:1000:32)?[39m
?[90m    at Function.Module._load (internal/modules/cjs/loader.js:899:14)?[39m
?[90m    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)?[39m
?[90m    at internal/main/run_main_module.js:17:47?[39m {
  errno: ?[33m31?[39m,
  code: ?[32m'UVWASI_EISDIR'?[39m,
  syscall: ?[32m'uvwasi_init'?[39m
}

https://github.com/nodejs/node/blob/96058f33a9c72796930a77c97018fda2cbb5ed03/test/wasi/test-wasi-options-validation.js#L9-L10

@Himself65 thank you for the information. Do the same errors happen with the latest master? If so, that is concerning because the tests consistently pass on Windows (including Windows 10) in the CI.

same problem

C:\Users\Himself65\Desktop\github\node\Release>node.exe -v
v14.0.0-pre

C:\Users\Himself65\Desktop\github\node\Release>node.exe C:\Users\Himself65\Desktop\github\node\test\wasi\test-wasi.js
executing cant_dotdot
(node:24956) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69720)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69720)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69720)
environ_sizes_get(69724, 69720)
environ_get(134432, 131168)
fd_fdstat_get(3, 69672)
path_open(3, 1, 1033, 14, 0, 264240830, 268435455, 0, 69668)

executing clock_getres
(node:26708) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69688)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69688)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69688)
environ_sizes_get(69692, 69688)
environ_get(134432, 131168)
clock_res_get(0, 69656)
clock_res_get(1, 69656)
clock_res_get(2, 69656)
clock_res_get(3, 69656)

executing exitcode
(node:29528) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 67080)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 67080)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 67080)
environ_sizes_get(67084, 67080)
environ_get(134432, 131168)
proc_exit(120)

executing fd_prestat_get_refresh
(node:28780) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 67080)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 67080)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 67080)
environ_sizes_get(67084, 67080)
environ_get(134432, 131168)
fd_fdstat_get(1, 67048)
fd_fdstat_get(1, 67048)

executing getentropy
(node:28172) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69656)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69656)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69656)
environ_sizes_get(69660, 69656)
environ_get(134432, 131168)
random_get(69392, 256)

executing getrusage
(node:27480) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69688)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69688)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69688)
environ_sizes_get(69692, 69688)
environ_get(134432, 131168)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)
clock_time_get(2, 1000, 69560)

executing gettimeofday
(node:11448) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69688)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69688)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69688)
environ_sizes_get(69692, 69688)
environ_get(134432, 131168)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)
clock_time_get(0, 1000, 69592)

executing notdir
(node:30268) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69704)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69704)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69704)
environ_sizes_get(69708, 69704)
environ_get(134432, 131168)
fd_fdstat_get(3, 69656)
path_open(3, 1, 1033, 7, 2, 264240830, 268435455, 4, 69652)

executing preopen_populates
(node:9288) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 67080)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 67080)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 67080)
environ_sizes_get(67084, 67080)
environ_get(134432, 131168)

executing read_file
(node:27236) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 70888)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 70888)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 70888)
environ_sizes_get(70892, 70888)
environ_get(134432, 131168)
fd_fdstat_get(3, 70840)
path_open(3, 1, 1033, 9, 0, 264240830, 268435455, 0, 70836)
fd_read(5, 70840, 1, 70836)
fd_fdstat_get(1, 70840)
fd_write(1, 70848, 2, 70844)
fd_read(5, 70840, 1, 70836)

executing read_file_twice
(node:28280) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 70888)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 70888)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 70888)
environ_sizes_get(70892, 70888)
environ_get(134432, 131168)
fd_fdstat_get(3, 70824)
path_open(3, 1, 1033, 9, 0, 264240830, 268435455, 0, 70820)
fd_read(5, 70824, 1, 70820)
fd_fdstat_get(1, 70824)
fd_write(1, 70832, 2, 70828)
fd_read(5, 70824, 1, 70820)
fd_fdstat_get(3, 70824)
path_open(3, 1, 1033, 9, 0, 264240830, 268435455, 0, 70820)
fd_read(6, 70824, 1, 70820)
fd_read(6, 70824, 1, 70820)
fd_write(1, 70880, 2, 70876)

executing stat
(node:24936) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69832)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69832)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69832)
environ_sizes_get(69836, 69832)
environ_get(134432, 131168)
path_create_directory(4, 1029, 7)
fd_fdstat_get(4, 69592)
path_open(4, 1, 1065, 18, 1, 268419069, 268435455, 0, 69588)
fd_seek(5, 499, 0, 69624)
fd_write(5, 69624, 1, 69620)
fd_filestat_get(5, 69536)
fd_close(5)
path_filestat_get(4, 1065, 18, 0, 4)
fd_fdstat_get(4, 69528)
path_filestat_get(4, 1065, 18, -745259911, 4)
path_unlink_file(4, 1065, 18)
path_filestat_get(4, 1065, 18, -572100496, 4)
path_filestat_get(4, 1029, 7, 724624864, 4)
path_remove_directory(4, 1029, 7)
path_filestat_get(4, 1029, 7, -572100496, 4)

executing write_file
(node:10696) ExperimentalWarning: WASI is an experimental feature. This feature could change at any time
fd_prestat_get(3, 69752)
fd_prestat_dir_name(3, 131088, 9)
fd_prestat_get(4, 69752)
fd_prestat_dir_name(4, 131152, 5)
fd_prestat_get(5, 69752)
environ_sizes_get(69756, 69752)
environ_get(134432, 131168)
fd_fdstat_get(4, 69688)
path_open(4, 1, 1029, 10, 9, 268419069, 268435455, 0, 69684)
fd_fdstat_get(5, 69672)
fd_write(5, 69712, 2, 69708)
fd_close(5)


C:\Users\Himself65\Desktop\github\node\Release>node.exe C:\Users\Himself65\Desktop\github\node\test\wasi\test-wasi-options-validation.js
NOTE: The test started as a child_process using these flags: [ '--experimental-wasi-unstable-preview1' ] Use NODE_SKIP_FLAG_CHECK to run the test with the original
 flags.
wasi.js:59
    const wrap = new _WASI(args, envPairs, preopenArray);
                 ^

Error: UVWASI_EISDIR, uvwasi_init
    at new WASI (wasi.js:59:18)
    at Object.<anonymous> (C:\Users\Himself65\Desktop\github\node\test\wasi\test-wasi-options-validation.js:10:1)
    at Module._compile (internal/modules/cjs/loader.js:1208:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1228:10)
    at Module.load (internal/modules/cjs/loader.js:1057:32)
    at Function.Module._load (internal/modules/cjs/loader.js:952:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47 {
  errno: 31,
  code: 'UVWASI_EISDIR',
  syscall: 'uvwasi_init'
}

Proposed fix in https://github.com/cjihrig/uvwasi/pull/92.

I guess this wasn't detected by the CI because stdin isn't a TTY in the CI. I was able to get a Windows 10 environment setup, reproduced the issue, and was able to get all of the Node WASI tests passing with that patch. I also verified that the REPL example from the OP worked as expected.

@cjchoi Awesome, thanks!

stdin isn't a TTY in the CI

Does this mean it's not possible to add a regression test for this?

@cjihrig @RReverser could pseudo-tty test perhaps suffice?

FWIW, there is a libuv feature request for pseudo-tty support that may (or may not) help the situation in the future.

PR to fix this in Node: https://github.com/nodejs/node/pull/31495

Was this page helpful?
0 / 5 - 0 ratings

Related issues

willnwhite picture willnwhite  路  3Comments

cong88 picture cong88  路  3Comments

seishun picture seishun  路  3Comments

addaleax picture addaleax  路  3Comments

srl295 picture srl295  路  3Comments