From: Fred Drake Date: Wed, 9 May 2001 19:13:40 +0000 (+0000) Subject: Three uses of makesockaddr() used sockaddr buffers that had not be cleared; X-Git-Tag: v2.1.1c1~136 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=62648d14068f4650068659c12bc9a6d1660a7d00;p=thirdparty%2FPython%2Fcpython.git 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. This closes SF bug #416573. --- diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index ce572ff4f4e8..df10c8fd1370 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -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,6 +1362,7 @@ PySocketSock_recvfrom(PySocketSockObject *s, PyObject *args) if (buf == NULL) return NULL; Py_BEGIN_ALLOW_THREADS + memset(addrbuf, 0, addrlen); n = recvfrom(s->sock_fd, PyString_AsString(buf), len, flags, #ifndef MS_WINDOWS #if defined(PYOS_OS2)