diff options
author | Fred Drake <fdrake@acm.org> | 2000-07-01 03:40:12 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2000-07-01 03:40:12 (GMT) |
commit | 728819af5d60f50ab4fea33a44bd179732b20e9b (patch) | |
tree | 3e2e102c9f90de22737664b32c0b4bc09bcb655e /Modules/socketmodule.c | |
parent | 54610f31cc3f839bb366299290e61b2333a32d10 (diff) | |
download | cpython-728819af5d60f50ab4fea33a44bd179732b20e9b.zip cpython-728819af5d60f50ab4fea33a44bd179732b20e9b.tar.gz cpython-728819af5d60f50ab4fea33a44bd179732b20e9b.tar.bz2 |
Restore strict checking of socket address values; addresses passed to
the bind(), connect(), and connect_ex() methods must be a single
parameter.
Originally part of 1.98, reverted in 1.100.
Diffstat (limited to 'Modules/socketmodule.c')
-rw-r--r-- | Modules/socketmodule.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 6502ced..b10268e 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -45,15 +45,12 @@ Module interface: - a UNIX domain socket address is a string specifying the pathname Socket methods: -(NB: an argument list of the form (sockaddr...) means that multiple -arguments are treated the same as a single tuple argument, for backwards -compatibility. This is deprecated, and will be removed in future versions.) - s.accept() --> new socket object, sockaddr -- s.bind(sockaddr...) --> None +- s.bind(sockaddr) --> None - s.close() --> None -- s.connect(sockaddr...) --> None -- s.connect_ex(sockaddr...) --> 0 or errno (handy for e.g. async connect) +- s.connect(sockaddr) --> None +- s.connect_ex(sockaddr) --> 0 or errno (handy for e.g. async connect) - s.fileno() --> file descriptor - s.dup() --> same as socket.fromfd(os.dup(s.fileno(), ...) - s.getpeername() --> sockaddr @@ -856,7 +853,7 @@ If a nonzero buffersize argument is given, the return value is a\n\ string of that length; otherwise it is an integer."; -/* s.bind(sockaddr...) method */ +/* s.bind(sockaddr) method */ static PyObject * BUILD_FUNC_DEF_2(PySocketSock_bind,PySocketSockObject *,s, PyObject *,args) @@ -864,7 +861,10 @@ BUILD_FUNC_DEF_2(PySocketSock_bind,PySocketSockObject *,s, PyObject *,args) struct sockaddr *addr; int addrlen; int res; - if (!getsockaddrarg(s, args, &addr, &addrlen)) + PyObject *addro; + if (!PyArg_ParseTuple(args, "O:bind", &addro)) + return NULL; + if (!getsockaddrarg(s, addro, &addr, &addrlen)) return NULL; Py_BEGIN_ALLOW_THREADS res = bind(s->sock_fd, addr, addrlen); @@ -907,7 +907,7 @@ static char close_doc[] = Close the socket. It cannot be used after this call."; -/* s.connect(sockaddr...) method */ +/* s.connect(sockaddr) method */ static PyObject * BUILD_FUNC_DEF_2(PySocketSock_connect,PySocketSockObject *,s, PyObject *,args) @@ -915,7 +915,10 @@ BUILD_FUNC_DEF_2(PySocketSock_connect,PySocketSockObject *,s, PyObject *,args) struct sockaddr *addr; int addrlen; int res; - if (!getsockaddrarg(s, args, &addr, &addrlen)) + PyObject *addro; + if (!PyArg_ParseTuple(args, "O:connect", &addro)) + return NULL; + if (!getsockaddrarg(s, addro, &addr, &addrlen)) return NULL; Py_BEGIN_ALLOW_THREADS res = connect(s->sock_fd, addr, addrlen); @@ -933,7 +936,7 @@ Connect the socket to a remote address. For IP sockets, the address\n\ is a pair (host, port)."; -/* s.connect_ex(sockaddr...) method */ +/* s.connect_ex(sockaddr) method */ static PyObject * BUILD_FUNC_DEF_2(PySocketSock_connect_ex,PySocketSockObject *,s, PyObject *,args) @@ -941,7 +944,10 @@ BUILD_FUNC_DEF_2(PySocketSock_connect_ex,PySocketSockObject *,s, PyObject *,args struct sockaddr *addr; int addrlen; int res; - if (!getsockaddrarg(s, args, &addr, &addrlen)) + PyObject *addro; + if (!PyArg_ParseTuple(args, "O:connect_ex", &addro)) + return NULL; + if (!getsockaddrarg(s, addro, &addr, &addrlen)) return NULL; Py_BEGIN_ALLOW_THREADS res = connect(s->sock_fd, addr, addrlen); @@ -1321,13 +1327,13 @@ of the socket (flag == 1), or both ends (flag == 2)."; static PyMethodDef PySocketSock_methods[] = { {"accept", (PyCFunction)PySocketSock_accept, 1, accept_doc}, - {"bind", (PyCFunction)PySocketSock_bind, 0, + {"bind", (PyCFunction)PySocketSock_bind, 1, bind_doc}, {"close", (PyCFunction)PySocketSock_close, 1, close_doc}, - {"connect", (PyCFunction)PySocketSock_connect, 0, + {"connect", (PyCFunction)PySocketSock_connect, 1, connect_doc}, - {"connect_ex", (PyCFunction)PySocketSock_connect_ex, 0, + {"connect_ex", (PyCFunction)PySocketSock_connect_ex, 1, connect_ex_doc}, #ifndef NO_DUP {"dup", (PyCFunction)PySocketSock_dup, 1, |