Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 728819a

Browse files
committed
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.
1 parent 54610f3 commit 728819a

1 file changed

Lines changed: 21 additions & 15 deletions

File tree

Modules/socketmodule.c

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,12 @@ Module interface:
4545
- a UNIX domain socket address is a string specifying the pathname
4646
4747
Socket methods:
48-
(NB: an argument list of the form (sockaddr...) means that multiple
49-
arguments are treated the same as a single tuple argument, for backwards
50-
compatibility. This is deprecated, and will be removed in future versions.)
5148
5249
- s.accept() --> new socket object, sockaddr
53-
- s.bind(sockaddr...) --> None
50+
- s.bind(sockaddr) --> None
5451
- s.close() --> None
55-
- s.connect(sockaddr...) --> None
56-
- s.connect_ex(sockaddr...) --> 0 or errno (handy for e.g. async connect)
52+
- s.connect(sockaddr) --> None
53+
- s.connect_ex(sockaddr) --> 0 or errno (handy for e.g. async connect)
5754
- s.fileno() --> file descriptor
5855
- s.dup() --> same as socket.fromfd(os.dup(s.fileno(), ...)
5956
- s.getpeername() --> sockaddr
@@ -856,15 +853,18 @@ If a nonzero buffersize argument is given, the return value is a\n\
856853
string of that length; otherwise it is an integer.";
857854

858855

859-
/* s.bind(sockaddr...) method */
856+
/* s.bind(sockaddr) method */
860857

861858
static PyObject *
862859
BUILD_FUNC_DEF_2(PySocketSock_bind,PySocketSockObject *,s, PyObject *,args)
863860
{
864861
struct sockaddr *addr;
865862
int addrlen;
866863
int res;
867-
if (!getsockaddrarg(s, args, &addr, &addrlen))
864+
PyObject *addro;
865+
if (!PyArg_ParseTuple(args, "O:bind", &addro))
866+
return NULL;
867+
if (!getsockaddrarg(s, addro, &addr, &addrlen))
868868
return NULL;
869869
Py_BEGIN_ALLOW_THREADS
870870
res = bind(s->sock_fd, addr, addrlen);
@@ -907,15 +907,18 @@ static char close_doc[] =
907907
Close the socket. It cannot be used after this call.";
908908

909909

910-
/* s.connect(sockaddr...) method */
910+
/* s.connect(sockaddr) method */
911911

912912
static PyObject *
913913
BUILD_FUNC_DEF_2(PySocketSock_connect,PySocketSockObject *,s, PyObject *,args)
914914
{
915915
struct sockaddr *addr;
916916
int addrlen;
917917
int res;
918-
if (!getsockaddrarg(s, args, &addr, &addrlen))
918+
PyObject *addro;
919+
if (!PyArg_ParseTuple(args, "O:connect", &addro))
920+
return NULL;
921+
if (!getsockaddrarg(s, addro, &addr, &addrlen))
919922
return NULL;
920923
Py_BEGIN_ALLOW_THREADS
921924
res = connect(s->sock_fd, addr, addrlen);
@@ -933,15 +936,18 @@ Connect the socket to a remote address. For IP sockets, the address\n\
933936
is a pair (host, port).";
934937

935938

936-
/* s.connect_ex(sockaddr...) method */
939+
/* s.connect_ex(sockaddr) method */
937940

938941
static PyObject *
939942
BUILD_FUNC_DEF_2(PySocketSock_connect_ex,PySocketSockObject *,s, PyObject *,args)
940943
{
941944
struct sockaddr *addr;
942945
int addrlen;
943946
int res;
944-
if (!getsockaddrarg(s, args, &addr, &addrlen))
947+
PyObject *addro;
948+
if (!PyArg_ParseTuple(args, "O:connect_ex", &addro))
949+
return NULL;
950+
if (!getsockaddrarg(s, addro, &addr, &addrlen))
945951
return NULL;
946952
Py_BEGIN_ALLOW_THREADS
947953
res = connect(s->sock_fd, addr, addrlen);
@@ -1321,13 +1327,13 @@ of the socket (flag == 1), or both ends (flag == 2).";
13211327
static PyMethodDef PySocketSock_methods[] = {
13221328
{"accept", (PyCFunction)PySocketSock_accept, 1,
13231329
accept_doc},
1324-
{"bind", (PyCFunction)PySocketSock_bind, 0,
1330+
{"bind", (PyCFunction)PySocketSock_bind, 1,
13251331
bind_doc},
13261332
{"close", (PyCFunction)PySocketSock_close, 1,
13271333
close_doc},
1328-
{"connect", (PyCFunction)PySocketSock_connect, 0,
1334+
{"connect", (PyCFunction)PySocketSock_connect, 1,
13291335
connect_doc},
1330-
{"connect_ex", (PyCFunction)PySocketSock_connect_ex, 0,
1336+
{"connect_ex", (PyCFunction)PySocketSock_connect_ex, 1,
13311337
connect_ex_doc},
13321338
#ifndef NO_DUP
13331339
{"dup", (PyCFunction)PySocketSock_dup, 1,

0 commit comments

Comments
 (0)