summaryrefslogtreecommitdiffstats
path: root/Modules/socketmodule.c
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2023-01-23 23:03:26 (GMT)
committerGitHub <noreply@github.com>2023-01-23 23:03:26 (GMT)
commitb724ac2fe7fbb5a7a33d639cad8e748f17b325e0 (patch)
treef17a8c5dcf6f6a5bc7f20e05f964d6f3208ffb58 /Modules/socketmodule.c
parentbd7903967cd2a19ebc842dd1cce75f60a18aef02 (diff)
downloadcpython-b724ac2fe7fbb5a7a33d639cad8e748f17b325e0.zip
cpython-b724ac2fe7fbb5a7a33d639cad8e748f17b325e0.tar.gz
cpython-b724ac2fe7fbb5a7a33d639cad8e748f17b325e0.tar.bz2
gh-100795: Don't call freeaddrinfo on failure. (#101252)
When getaddrinfo returns an error, the output pointer is in an unknown state Don't call freeaddrinfo on it. See the issue for discussion and details with links to reasoning. _Most_ libc getaddrinfo implementations never modify the output pointer unless they are returning success. Co-authored-by: Sergey G. Brester <github@sebres.de> Co-authored-by: Oleg Iarygin <dralife@yandex.ru>
Diffstat (limited to 'Modules/socketmodule.c')
-rw-r--r--Modules/socketmodule.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 4747a23..0a9e465 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1085,6 +1085,7 @@ setipaddr(const char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int
subsequent call to getaddrinfo() does not destroy the
outcome of the first call. */
if (error) {
+ res = NULL; // no-op, remind us that it is invalid; gh-100795
set_gaierror(error);
return -1;
}
@@ -1195,6 +1196,7 @@ setipaddr(const char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int
#endif
Py_END_ALLOW_THREADS
if (error) {
+ res = NULL; // no-op, remind us that it is invalid; gh-100795
set_gaierror(error);
return -1;
}
@@ -6719,6 +6721,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs)
error = getaddrinfo(hptr, pptr, &hints, &res0);
Py_END_ALLOW_THREADS
if (error) {
+ res0 = NULL; // gh-100795
set_gaierror(error);
goto err;
}
@@ -6815,6 +6818,7 @@ socket_getnameinfo(PyObject *self, PyObject *args)
error = getaddrinfo(hostp, pbuf, &hints, &res);
Py_END_ALLOW_THREADS
if (error) {
+ res = NULL; // gh-100795
set_gaierror(error);
goto fail;
}