summaryrefslogtreecommitdiffstats
path: root/Modules/socketmodule.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2007-08-09 21:06:37 (GMT)
committerGuido van Rossum <guido@python.org>2007-08-09 21:06:37 (GMT)
commit9ce8e3809906a0e7a01b548883b85d0e323d2f6d (patch)
tree2c718b5849506f31cd861f0f2900ad257c79ba5e /Modules/socketmodule.c
parent6ca130d0dba71dd494ae284a76e45e7050132468 (diff)
downloadcpython-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.c7
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)