diff options
author | Guido van Rossum <guido@python.org> | 2007-08-09 21:06:37 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-08-09 21:06:37 (GMT) |
commit | 9ce8e3809906a0e7a01b548883b85d0e323d2f6d (patch) | |
tree | 2c718b5849506f31cd861f0f2900ad257c79ba5e /Modules/socketmodule.c | |
parent | 6ca130d0dba71dd494ae284a76e45e7050132468 (diff) | |
download | cpython-9ce8e3809906a0e7a01b548883b85d0e323d2f6d.zip cpython-9ce8e3809906a0e7a01b548883b85d0e323d2f6d.tar.gz cpython-9ce8e3809906a0e7a01b548883b85d0e323d2f6d.tar.bz2 |
Fix two bugs in socket_getaddr():
(a) 'single' shouldn't be DECREF'ed in the cleanup code;
(b) the fallback case in makesockaddr() should use y# instead of s#
in the format, since the data is bytes, not UTF-8 text.
Diffstat (limited to 'Modules/socketmodule.c')
-rw-r--r-- | Modules/socketmodule.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d9e9844..27c2152 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1174,8 +1174,8 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto) default: /* If we don't know the address family, don't raise an - exception -- return it as a tuple. */ - return Py_BuildValue("is#", + exception -- return it as an (int, bytes) tuple. */ + return Py_BuildValue("iy#", addr->sa_family, addr->sa_data, sizeof(addr->sa_data)); @@ -3743,7 +3743,6 @@ socket_getaddrinfo(PyObject *self, PyObject *args) int family, socktype, protocol, flags; int error; PyObject *all = (PyObject *)NULL; - PyObject *single = (PyObject *)NULL; PyObject *idna = NULL; family = socktype = protocol = flags = 0; @@ -3797,6 +3796,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args) if ((all = PyList_New(0)) == NULL) goto err; for (res = res0; res; res = res->ai_next) { + PyObject *single; PyObject *addr = makesockaddr(-1, res->ai_addr, res->ai_addrlen, protocol); if (addr == NULL) @@ -3818,7 +3818,6 @@ socket_getaddrinfo(PyObject *self, PyObject *args) freeaddrinfo(res0); return all; err: - Py_XDECREF(single); Py_XDECREF(all); Py_XDECREF(idna); if (res0) |