From cc2f2058846bb29e18fdadf455d5f5af71b2554f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Thu, 17 Aug 2023 18:26:50 +0700 Subject: [PATCH] Do not call freeaddrinfo(3) on nullptr freeaddrinfo(3) only defined to free one or more addrinfo structures returned by getaddrinfo(3). Thus, it's undefined behaviour for calling freeaddrinfo(3) on nullptr, some libc only call free(3) on the the passed addrinfo, but other libc assumes the addrinfo is always valid. Let's be explicit instead of relying on undefined behaviours. Let's drop one call to freeaddrinfo(3) because the addrinfo there is always nullptr and guard the second. --- src/socket.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/socket.cpp b/src/socket.cpp index 1211310..e9402d3 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -108,7 +108,6 @@ class dap::Socket::Shared : public dap::ReaderWriter { return out; } - freeaddrinfo(info); term(); return nullptr; } @@ -117,7 +116,9 @@ class dap::Socket::Shared : public dap::ReaderWriter { Shared(addrinfo* info, SOCKET socket) : info(info), s(socket) {} ~Shared() { - freeaddrinfo(info); + if (info) { + freeaddrinfo(info); + } close(); term(); }