diff --git a/deps/uv/src/unix/eio/eio.c b/deps/uv/src/unix/eio/eio.c index a005db5d3b4b..74153ad16485 100644 --- a/deps/uv/src/unix/eio/eio.c +++ b/deps/uv/src/unix/eio/eio.c @@ -1812,7 +1812,17 @@ eio__scandir (eio_req *req, etp_worker *self) #endif if (req->flags & EIO_FLAG_PTR1_FREE) - free (req->ptr1); + { + req->flags &= ~EIO_FLAG_PTR1_FREE; + free (req->ptr1); + req->ptr1 = NULL; + } + + if (!dirp) + { + req->errorno = errno; + return; + } req->flags |= EIO_FLAG_PTR1_FREE | EIO_FLAG_PTR2_FREE; req->ptr1 = dents = flags ? malloc (dentalloc * sizeof (eio_dirent)) : 0; diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c index cab41064b3ac..60f5e59d7a0d 100644 --- a/deps/uv/src/unix/fs.c +++ b/deps/uv/src/unix/fs.c @@ -123,6 +123,8 @@ static int uv__fs_after(eio_req* eio) { * callback. We must keep it until uv_fs_req_cleanup. If we get rid of * libeio this can be avoided. */ + if (req->eio->ptr2 == NULL) + break; buflen = 0; name = req->eio->ptr2; for (i = 0; i < req->result; i++) { diff --git a/deps/uv/src/win/getaddrinfo.c b/deps/uv/src/win/getaddrinfo.c index 1d4e819d765f..3d313420ae96 100644 --- a/deps/uv/src/win/getaddrinfo.c +++ b/deps/uv/src/win/getaddrinfo.c @@ -255,7 +255,7 @@ int uv_getaddrinfo(uv_loop_t* loop, goto error; } - uv_req_init(loop, (uv_req_t*) handle); + uv_req_init(loop, (uv_req_t*)handle); handle->getaddrinfo_cb = getaddrinfo_cb; handle->res = NULL;