Commit 5db099a4 authored by Martin v. Löwis's avatar Martin v. Löwis

Release host name memory. Fixes #783312. Will backport to 2.3.

parent 7edd0a9b
...@@ -956,7 +956,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, ...@@ -956,7 +956,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
{ {
struct sockaddr_in* addr; struct sockaddr_in* addr;
char *host; char *host;
int port; int port, result;
addr=(struct sockaddr_in*)&(s->sock_addr).in; addr=(struct sockaddr_in*)&(s->sock_addr).in;
if (!PyTuple_Check(args)) { if (!PyTuple_Check(args)) {
PyErr_Format( PyErr_Format(
...@@ -969,7 +969,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, ...@@ -969,7 +969,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
if (!PyArg_ParseTuple(args, "eti:getsockaddrarg", if (!PyArg_ParseTuple(args, "eti:getsockaddrarg",
"idna", &host, &port)) "idna", &host, &port))
return 0; return 0;
if (setipaddr(host, (struct sockaddr *)addr, sizeof(*addr), AF_INET) < 0) result = setipaddr(host, (struct sockaddr *)addr,
sizeof(*addr), AF_INET);
PyMem_Free(host);
if (result < 0)
return 0; return 0;
addr->sin_family = AF_INET; addr->sin_family = AF_INET;
addr->sin_port = htons((short)port); addr->sin_port = htons((short)port);
...@@ -983,7 +986,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, ...@@ -983,7 +986,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
{ {
struct sockaddr_in6* addr; struct sockaddr_in6* addr;
char *host; char *host;
int port, flowinfo, scope_id; int port, flowinfo, scope_id, result;
addr = (struct sockaddr_in6*)&(s->sock_addr).in6; addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
flowinfo = scope_id = 0; flowinfo = scope_id = 0;
if (!PyArg_ParseTuple(args, "eti|ii", if (!PyArg_ParseTuple(args, "eti|ii",
...@@ -991,7 +994,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, ...@@ -991,7 +994,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
&scope_id)) { &scope_id)) {
return 0; return 0;
} }
if (setipaddr(host, (struct sockaddr *)addr, sizeof(*addr), AF_INET6) < 0) result = setipaddr(host, (struct sockaddr *)addr,
sizeof(*addr), AF_INET6);
PyMem_Free(host);
if (result < 0)
return 0; return 0;
addr->sin6_family = s->sock_family; addr->sin6_family = s->sock_family;
addr->sin6_port = htons((short)port); addr->sin6_port = htons((short)port);
...@@ -3100,7 +3106,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args) ...@@ -3100,7 +3106,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args)
pptr = (char *)NULL; pptr = (char *)NULL;
} else { } else {
PyErr_SetString(socket_error, "Int or String expected"); PyErr_SetString(socket_error, "Int or String expected");
return NULL; goto err;
} }
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_family = family; hints.ai_family = family;
...@@ -3114,7 +3120,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args) ...@@ -3114,7 +3120,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args)
RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */ RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */
if (error) { if (error) {
set_gaierror(error); set_gaierror(error);
return NULL; goto err;
} }
if ((all = PyList_New(0)) == NULL) if ((all = PyList_New(0)) == NULL)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment