diff options
author | Guido van Rossum <guido@python.org> | 2007-11-21 22:09:45 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-11-21 22:09:45 (GMT) |
commit | 8a392d7387c9992537b0e1f66de989e34bd4eb4e (patch) | |
tree | 689dd92ee0ca56b2464982cb07b398af03f81f19 | |
parent | b08340053cb10af7290628ed624e4f7ec6be398b (diff) | |
download | cpython-8a392d7387c9992537b0e1f66de989e34bd4eb4e.zip cpython-8a392d7387c9992537b0e1f66de989e34bd4eb4e.tar.gz cpython-8a392d7387c9992537b0e1f66de989e34bd4eb4e.tar.bz2 |
Convert the socket module to insist on bytes for input, and to return bytes
(not bytearray) on output. Discovered a bunch of places that were still
depending on it accepting text strings.
-rw-r--r-- | Lib/SimpleXMLRPCServer.py | 3 | ||||
-rwxr-xr-x | Lib/smtplib.py | 10 | ||||
-rw-r--r-- | Lib/test/test_ftplib.py | 2 | ||||
-rw-r--r-- | Lib/test/test_poplib.py | 2 | ||||
-rw-r--r-- | Lib/test/test_smtplib.py | 2 | ||||
-rw-r--r-- | Lib/test/test_socket.py | 2 | ||||
-rw-r--r-- | Lib/test/test_urllib2_localnet.py | 9 | ||||
-rw-r--r-- | Modules/socketmodule.c | 55 |
8 files changed, 42 insertions, 43 deletions
diff --git a/Lib/SimpleXMLRPCServer.py b/Lib/SimpleXMLRPCServer.py index 5f6e9d0..f74ca54 100644 --- a/Lib/SimpleXMLRPCServer.py +++ b/Lib/SimpleXMLRPCServer.py @@ -464,7 +464,8 @@ class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): self.end_headers() else: - # got a valid XML RPC response + # Got a valid XML RPC response; convert to bytes first + response = response.encode("utf-8") self.send_response(200) self.send_header("Content-type", "text/xml") self.send_header("Content-length", str(len(response))) diff --git a/Lib/smtplib.py b/Lib/smtplib.py index e10e327..0b4cbf0 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -295,12 +295,14 @@ class SMTP: if self.debuglevel > 0: print("connect:", msg, file=stderr) return (code, msg) - def send(self, str): - """Send `str' to the server.""" - if self.debuglevel > 0: print('send:', repr(str), file=stderr) + def send(self, s): + """Send `s' to the server.""" + if self.debuglevel > 0: print('send:', repr(s), file=stderr) if self.sock: + if isinstance(s, str): + s = s.encode("ascii") try: - self.sock.sendall(str) + self.sock.sendall(s) except socket.error: self.close() raise SMTPServerDisconnected('Server not connected') diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py index 62aae05..d782c53 100644 --- a/Lib/test/test_ftplib.py +++ b/Lib/test/test_ftplib.py @@ -18,7 +18,7 @@ def server(evt, ready): except socket.timeout: pass else: - conn.send("1 Hola mundo\n") + conn.send(b"1 Hola mundo\n") conn.close() finally: serv.close() diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py index ef8565c..983cf21 100644 --- a/Lib/test/test_poplib.py +++ b/Lib/test/test_poplib.py @@ -19,7 +19,7 @@ def server(ready, evt): except socket.timeout: pass else: - conn.send("+ Hola mundo\n") + conn.send(b"+ Hola mundo\n") conn.close() finally: serv.close() diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py index 00c3ad4..4151d6b 100644 --- a/Lib/test/test_smtplib.py +++ b/Lib/test/test_smtplib.py @@ -50,7 +50,7 @@ class GeneralTests(TestCase): def setUp(self): self.evt = threading.Event() - servargs = (self.evt, "220 Hola mundo\n") + servargs = (self.evt, b"220 Hola mundo\n") threading.Thread(target=server, args=servargs).start() # wait until server thread has assigned a port number diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index c01d998..97445a0 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -498,7 +498,7 @@ class GeneralModuleTests(unittest.TestCase): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) sock.close() - self.assertRaises(socket.error, sock.send, "spam") + self.assertRaises(socket.error, sock.send, b"spam") def testNewAttributes(self): # testing .family, .type and .protocol diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py index dde9504..f0b5dea 100644 --- a/Lib/test/test_urllib2_localnet.py +++ b/Lib/test/test_urllib2_localnet.py @@ -139,7 +139,7 @@ class DigestAuthHandler: # not. #request_handler.send_header('Connection', 'close') request_handler.end_headers() - request_handler.wfile.write("Proxy Authentication Required.") + request_handler.wfile.write(b"Proxy Authentication Required.") return False def handle_request(self, request_handler): @@ -210,9 +210,10 @@ class FakeProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler): self.send_response(200, "OK") self.send_header("Content-Type", "text/html") self.end_headers() - self.wfile.write("You've reached %s!<BR>" % self.path) - self.wfile.write("Our apologies, but our server is down due to " - "a sudden zombie invasion.") + self.wfile.write(bytes("You've reached %s!<BR>" % self.path, + "ascii")) + self.wfile.write(b"Our apologies, but our server is down due to " + b"a sudden zombie invasion.") # Test cases diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 9f312ea..e4e30b8 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -947,7 +947,7 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto) #ifdef linux if (a->sun_path[0] == 0) { /* Linux abstract namespace */ addrlen -= (sizeof(*a) - sizeof(a->sun_path)); - return PyBytes_FromStringAndSize(a->sun_path, addrlen); + return PyString_FromStringAndSize(a->sun_path, addrlen); } else #endif /* linux */ @@ -1273,12 +1273,12 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, addr = (struct sockaddr_sco *)addr_ret; _BT_SCO_MEMB(addr, family) = AF_BLUETOOTH; - if (!PyBytes_Check(args)) { + if (!PyString_Check(args)) { PyErr_SetString(socket_error, "getsockaddrarg: " "wrong format"); return 0; } - straddr = PyBytes_AS_STRING(args); + straddr = PyString_AS_STRING(args); if (setbdaddr(straddr, &_BT_SCO_MEMB(addr, bdaddr)) < 0) return 0; @@ -1313,7 +1313,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, Py_Type(args)->tp_name); return 0; } - if (!PyArg_ParseTuple(args, "si|iis#", &interfaceName, + if (!PyArg_ParseTuple(args, "si|iiy#", &interfaceName, &protoNumber, &pkttype, &hatype, &haddr, &halen)) return 0; @@ -1606,7 +1606,7 @@ sock_setsockopt(PySocketSockObject *s, PyObject *args) } else { PyErr_Clear(); - if (!PyArg_ParseTuple(args, "iis#:setsockopt", + if (!PyArg_ParseTuple(args, "iiy#:setsockopt", &level, &optname, &buf, &buflen)) return NULL; } @@ -1662,19 +1662,16 @@ sock_getsockopt(PySocketSockObject *s, PyObject *args) "getsockopt buflen out of range"); return NULL; } - buf = PyBytes_FromStringAndSize((char *)NULL, buflen); + buf = PyString_FromStringAndSize((char *)NULL, buflen); if (buf == NULL) return NULL; res = getsockopt(s->sock_fd, level, optname, - (void *)PyBytes_AS_STRING(buf), &buflen); + (void *)PyString_AS_STRING(buf), &buflen); if (res < 0) { Py_DECREF(buf); return s->errorhandler(); } - if (PyBytes_Resize(buf, buflen) < 0) { - Py_DECREF(buf); - return NULL; - } + _PyString_Resize(&buf, buflen); return buf; } @@ -2097,12 +2094,12 @@ sock_recv(PySocketSockObject *s, PyObject *args) } /* Allocate a new string. */ - buf = PyBytes_FromStringAndSize((char *) 0, recvlen); + buf = PyString_FromStringAndSize((char *) 0, recvlen); if (buf == NULL) return NULL; /* Call the guts */ - outlen = sock_recv_guts(s, PyBytes_AS_STRING(buf), recvlen, flags); + outlen = sock_recv_guts(s, PyString_AS_STRING(buf), recvlen, flags); if (outlen < 0) { /* An error occurred, release the string and return an error. */ @@ -2112,9 +2109,7 @@ sock_recv(PySocketSockObject *s, PyObject *args) if (outlen != recvlen) { /* We did not read as many bytes as we anticipated, resize the string if possible and be successful. */ - if (PyBytes_Resize(buf, outlen) < 0) - /* Oopsy, not so successful after all. */ - return NULL; + _PyString_Resize(&buf, outlen); } return buf; @@ -2270,11 +2265,11 @@ sock_recvfrom(PySocketSockObject *s, PyObject *args) return NULL; } - buf = PyBytes_FromStringAndSize((char *) 0, recvlen); + buf = PyString_FromStringAndSize((char *) 0, recvlen); if (buf == NULL) return NULL; - outlen = sock_recvfrom_guts(s, PyBytes_AS_STRING(buf), + outlen = sock_recvfrom_guts(s, PyString_AS_STRING(buf), recvlen, flags, &addr); if (outlen < 0) { goto finally; @@ -2283,7 +2278,7 @@ sock_recvfrom(PySocketSockObject *s, PyObject *args) if (outlen != recvlen) { /* We did not read as many bytes as we anticipated, resize the string if possible and be succesful. */ - if (PyBytes_Resize(buf, outlen) < 0) + if (_PyString_Resize(&buf, outlen) < 0) /* Oopsy, not so succesful after all. */ goto finally; } @@ -2358,7 +2353,7 @@ sock_send(PySocketSockObject *s, PyObject *args) char *buf; int len, n = -1, flags = 0, timeout; - if (!PyArg_ParseTuple(args, "s#|i:send", &buf, &len, &flags)) + if (!PyArg_ParseTuple(args, "y#|i:send", &buf, &len, &flags)) return NULL; if (!IS_SELECTABLE(s)) @@ -2399,7 +2394,7 @@ sock_sendall(PySocketSockObject *s, PyObject *args) char *buf; int len, n = -1, flags = 0, timeout; - if (!PyArg_ParseTuple(args, "s#|i:sendall", &buf, &len, &flags)) + if (!PyArg_ParseTuple(args, "y#|i:sendall", &buf, &len, &flags)) return NULL; if (!IS_SELECTABLE(s)) @@ -2454,9 +2449,9 @@ sock_sendto(PySocketSockObject *s, PyObject *args) int addrlen, len, n = -1, flags, timeout; flags = 0; - if (!PyArg_ParseTuple(args, "s#O:sendto", &buf, &len, &addro)) { + if (!PyArg_ParseTuple(args, "y#O:sendto", &buf, &len, &addro)) { PyErr_Clear(); - if (!PyArg_ParseTuple(args, "s#iO:sendto", + if (!PyArg_ParseTuple(args, "y#iO:sendto", &buf, &len, &flags, &addro)) return NULL; } @@ -3382,7 +3377,7 @@ socket_inet_aton(PyObject *self, PyObject *args) if (inet_aton != NULL) { #endif if (inet_aton(ip_addr, &buf)) - return PyBytes_FromStringAndSize((char *)(&buf), + return PyString_FromStringAndSize((char *)(&buf), sizeof(buf)); PyErr_SetString(socket_error, @@ -3411,8 +3406,8 @@ socket_inet_aton(PyObject *self, PyObject *args) return NULL; } } - return PyBytes_FromStringAndSize((char *) &packed_addr, - sizeof(packed_addr)); + return PyString_FromStringAndSize((char *) &packed_addr, + sizeof(packed_addr)); #ifdef USE_INET_ATON_WEAKLINK } @@ -3488,12 +3483,12 @@ socket_inet_pton(PyObject *self, PyObject *args) "illegal IP address string passed to inet_pton"); return NULL; } else if (af == AF_INET) { - return PyBytes_FromStringAndSize(packed, - sizeof(struct in_addr)); + return PyString_FromStringAndSize(packed, + sizeof(struct in_addr)); #ifdef ENABLE_IPV6 } else if (af == AF_INET6) { - return PyBytes_FromStringAndSize(packed, - sizeof(struct in6_addr)); + return PyString_FromStringAndSize(packed, + sizeof(struct in6_addr)); #endif } else { PyErr_SetString(socket_error, "unknown address family"); |