mirror of https://github.com/python/cpython
Three uses of makesockaddr() used sockaddr buffers that had not be cleared;
this could cause invalid paths to be returned for AF_UNIX sockets on some platforms (including FreeBSD 4.2-RELEASE), appearantly because there is no assurance that the address will be nul-terminated when filled in by the kernel. PySocketSock_recvfrom(): Use PyString_AS_STRING() to get the data pointer of a string we create ourselves; there is no need for the extra type check from PyString_AsString(). This closes SF bug #416573.
This commit is contained in:
parent
5ac946c697
commit
fd16834ca7
|
@ -790,6 +790,7 @@ PySocketSock_accept(PySocketSockObject *s, PyObject *args)
|
|||
return NULL;
|
||||
if (!getsockaddrlen(s, &addrlen))
|
||||
return NULL;
|
||||
memset(addrbuf, 0, addrlen);
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
newfd = accept(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
|
||||
Py_END_ALLOW_THREADS
|
||||
|
@ -1212,6 +1213,7 @@ PySocketSock_getpeername(PySocketSockObject *s, PyObject *args)
|
|||
return NULL;
|
||||
if (!getsockaddrlen(s, &addrlen))
|
||||
return NULL;
|
||||
memset(addrbuf, 0, addrlen);
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
res = getpeername(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
|
||||
Py_END_ALLOW_THREADS
|
||||
|
@ -1360,7 +1362,8 @@ PySocketSock_recvfrom(PySocketSockObject *s, PyObject *args)
|
|||
if (buf == NULL)
|
||||
return NULL;
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
n = recvfrom(s->sock_fd, PyString_AsString(buf), len, flags,
|
||||
memset(addrbuf, 0, addrlen);
|
||||
n = recvfrom(s->sock_fd, PyString_AS_STRING(buf), len, flags,
|
||||
#ifndef MS_WINDOWS
|
||||
#if defined(PYOS_OS2)
|
||||
(struct sockaddr *)addrbuf, &addrlen
|
||||
|
|
Loading…
Reference in New Issue