From 22f2c2c8718a6a2cc8d641e95a75e8f34ecaaa9a Mon Sep 17 00:00:00 2001 From: cjihrig Date: Tue, 5 May 2020 10:09:39 -0400 Subject: [PATCH] wasi: fix poll_oneoff memory interface The WASM memory interfacing logic was wrong (particularly around the size of __wasi_subscription_t). This commit fixes the logic. PR-URL: https://github.com/nodejs/node/pull/33250 Reviewed-By: Anna Henningsen Reviewed-By: Jiawen Geng --- src/node_wasi.cc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/node_wasi.cc b/src/node_wasi.cc index c4ead7f55af8dc..2f2daa2921dd7b 100644 --- a/src/node_wasi.cc +++ b/src/node_wasi.cc @@ -1455,21 +1455,21 @@ void WASI::PollOneoff(const FunctionCallbackInfo& args) { } for (uint32_t i = 0; i < nsubscriptions; ++i) { - uvwasi_subscription_t sub = in[i]; - wasi->readUInt64(memory, &sub.userdata, in_ptr); - wasi->readUInt8(memory, &sub.type, in_ptr + 8); - - if (sub.type == UVWASI_EVENTTYPE_CLOCK) { - wasi->readUInt32(memory, &sub.u.clock.clock_id, in_ptr + 16); - wasi->readUInt64(memory, &sub.u.clock.timeout, in_ptr + 24); - wasi->readUInt64(memory, &sub.u.clock.precision, in_ptr + 32); - wasi->readUInt16(memory, &sub.u.clock.flags, in_ptr + 40); - } else if (sub.type == UVWASI_EVENTTYPE_FD_READ || - sub.type == UVWASI_EVENTTYPE_FD_WRITE) { - wasi->readUInt32(memory, &sub.u.fd_readwrite.fd, in_ptr + 16); + uvwasi_subscription_t* sub = &in[i]; + wasi->readUInt64(memory, &sub->userdata, in_ptr); + wasi->readUInt8(memory, &sub->type, in_ptr + 8); + + if (sub->type == UVWASI_EVENTTYPE_CLOCK) { + wasi->readUInt32(memory, &sub->u.clock.clock_id, in_ptr + 16); + wasi->readUInt64(memory, &sub->u.clock.timeout, in_ptr + 24); + wasi->readUInt64(memory, &sub->u.clock.precision, in_ptr + 32); + wasi->readUInt16(memory, &sub->u.clock.flags, in_ptr + 40); + } else if (sub->type == UVWASI_EVENTTYPE_FD_READ || + sub->type == UVWASI_EVENTTYPE_FD_WRITE) { + wasi->readUInt32(memory, &sub->u.fd_readwrite.fd, in_ptr + 16); } - in_ptr += 56; + in_ptr += 48; } size_t nevents;