Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5db099a

Browse files
committed
Release host name memory. Fixes #783312. Will backport to 2.3.
1 parent 7edd0a9 commit 5db099a

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

Modules/socketmodule.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
956956
{
957957
struct sockaddr_in* addr;
958958
char *host;
959-
int port;
959+
int port, result;
960960
addr=(struct sockaddr_in*)&(s->sock_addr).in;
961961
if (!PyTuple_Check(args)) {
962962
PyErr_Format(
@@ -969,7 +969,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
969969
if (!PyArg_ParseTuple(args, "eti:getsockaddrarg",
970970
"idna", &host, &port))
971971
return 0;
972-
if (setipaddr(host, (struct sockaddr *)addr, sizeof(*addr), AF_INET) < 0)
972+
result = setipaddr(host, (struct sockaddr *)addr,
973+
sizeof(*addr), AF_INET);
974+
PyMem_Free(host);
975+
if (result < 0)
973976
return 0;
974977
addr->sin_family = AF_INET;
975978
addr->sin_port = htons((short)port);
@@ -983,15 +986,18 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
983986
{
984987
struct sockaddr_in6* addr;
985988
char *host;
986-
int port, flowinfo, scope_id;
989+
int port, flowinfo, scope_id, result;
987990
addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
988991
flowinfo = scope_id = 0;
989992
if (!PyArg_ParseTuple(args, "eti|ii",
990993
"idna", &host, &port, &flowinfo,
991994
&scope_id)) {
992995
return 0;
993996
}
994-
if (setipaddr(host, (struct sockaddr *)addr, sizeof(*addr), AF_INET6) < 0)
997+
result = setipaddr(host, (struct sockaddr *)addr,
998+
sizeof(*addr), AF_INET6);
999+
PyMem_Free(host);
1000+
if (result < 0)
9951001
return 0;
9961002
addr->sin6_family = s->sock_family;
9971003
addr->sin6_port = htons((short)port);
@@ -3100,7 +3106,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args)
31003106
pptr = (char *)NULL;
31013107
} else {
31023108
PyErr_SetString(socket_error, "Int or String expected");
3103-
return NULL;
3109+
goto err;
31043110
}
31053111
memset(&hints, 0, sizeof(hints));
31063112
hints.ai_family = family;
@@ -3114,7 +3120,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args)
31143120
RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */
31153121
if (error) {
31163122
set_gaierror(error);
3117-
return NULL;
3123+
goto err;
31183124
}
31193125

31203126
if ((all = PyList_New(0)) == NULL)

0 commit comments

Comments
 (0)