From 7bfb5ae7f923ef185f528a4886c255017df51937 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Fri, 4 Nov 2016 00:21:04 +0100 Subject: [PATCH] win: fix free() on bad input in uv_getaddrinfo() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The error path frees `req->alloc` but that hasn't been set yet when `service` and `node` are both NULL. Simply return instead of jumping to the error handling block. Fixes: https://github.com/libuv/libuv/issues/1122 PR-URL: https://github.com/libuv/libuv/pull/1123 Reviewed-By: Colin Ihrig Reviewed-By: Santiago Gimeno Reviewed-By: Saúl Ibarra Corretgé --- src/win/getaddrinfo.c | 3 +-- test/test-getaddrinfo.c | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/win/getaddrinfo.c b/src/win/getaddrinfo.c index 744f8e02..c13bfec3 100644 --- a/src/win/getaddrinfo.c +++ b/src/win/getaddrinfo.c @@ -262,8 +262,7 @@ int uv_getaddrinfo(uv_loop_t* loop, int err; if (req == NULL || (node == NULL && service == NULL)) { - err = WSAEINVAL; - goto error; + return UV_EINVAL; } uv_req_init(loop, (uv_req_t*)req); diff --git a/test/test-getaddrinfo.c b/test/test-getaddrinfo.c index 6b644a8d..03dc1269 100644 --- a/test/test-getaddrinfo.c +++ b/test/test-getaddrinfo.c @@ -83,6 +83,13 @@ static void getaddrinfo_cuncurrent_cb(uv_getaddrinfo_t* handle, TEST_IMPL(getaddrinfo_fail) { uv_getaddrinfo_t req; + ASSERT(UV_EINVAL == uv_getaddrinfo(uv_default_loop(), + &req, + (uv_getaddrinfo_cb) abort, + NULL, + NULL, + NULL)); + /* Use a FQDN by ending in a period */ ASSERT(0 == uv_getaddrinfo(uv_default_loop(), &req,