Author: guido.van.rossum
Date: Wed Nov 21 23:09:45 2007
New Revision: 59102

Modified:
   python/branches/py3k/Lib/SimpleXMLRPCServer.py
   python/branches/py3k/Lib/smtplib.py
   python/branches/py3k/Lib/test/test_ftplib.py
   python/branches/py3k/Lib/test/test_poplib.py
   python/branches/py3k/Lib/test/test_smtplib.py
   python/branches/py3k/Lib/test/test_socket.py
   python/branches/py3k/Lib/test/test_urllib2_localnet.py
   python/branches/py3k/Modules/socketmodule.c
Log:
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.


Modified: python/branches/py3k/Lib/SimpleXMLRPCServer.py
==============================================================================
--- python/branches/py3k/Lib/SimpleXMLRPCServer.py      (original)
+++ python/branches/py3k/Lib/SimpleXMLRPCServer.py      Wed Nov 21 23:09:45 2007
@@ -464,7 +464,8 @@
 
             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)))

Modified: python/branches/py3k/Lib/smtplib.py
==============================================================================
--- python/branches/py3k/Lib/smtplib.py (original)
+++ python/branches/py3k/Lib/smtplib.py Wed Nov 21 23:09:45 2007
@@ -295,12 +295,14 @@
         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')

Modified: python/branches/py3k/Lib/test/test_ftplib.py
==============================================================================
--- python/branches/py3k/Lib/test/test_ftplib.py        (original)
+++ python/branches/py3k/Lib/test/test_ftplib.py        Wed Nov 21 23:09:45 2007
@@ -18,7 +18,7 @@
     except socket.timeout:
         pass
     else:
-        conn.send("1 Hola mundo\n")
+        conn.send(b"1 Hola mundo\n")
         conn.close()
     finally:
         serv.close()

Modified: python/branches/py3k/Lib/test/test_poplib.py
==============================================================================
--- python/branches/py3k/Lib/test/test_poplib.py        (original)
+++ python/branches/py3k/Lib/test/test_poplib.py        Wed Nov 21 23:09:45 2007
@@ -19,7 +19,7 @@
     except socket.timeout:
         pass
     else:
-        conn.send("+ Hola mundo\n")
+        conn.send(b"+ Hola mundo\n")
         conn.close()
     finally:
         serv.close()

Modified: python/branches/py3k/Lib/test/test_smtplib.py
==============================================================================
--- python/branches/py3k/Lib/test/test_smtplib.py       (original)
+++ python/branches/py3k/Lib/test/test_smtplib.py       Wed Nov 21 23:09:45 2007
@@ -50,7 +50,7 @@
 
     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

Modified: python/branches/py3k/Lib/test/test_socket.py
==============================================================================
--- python/branches/py3k/Lib/test/test_socket.py        (original)
+++ python/branches/py3k/Lib/test/test_socket.py        Wed Nov 21 23:09:45 2007
@@ -498,7 +498,7 @@
         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

Modified: python/branches/py3k/Lib/test/test_urllib2_localnet.py
==============================================================================
--- python/branches/py3k/Lib/test/test_urllib2_localnet.py      (original)
+++ python/branches/py3k/Lib/test/test_urllib2_localnet.py      Wed Nov 21 
23:09:45 2007
@@ -139,7 +139,7 @@
         # 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 @@
             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
 

Modified: python/branches/py3k/Modules/socketmodule.c
==============================================================================
--- python/branches/py3k/Modules/socketmodule.c (original)
+++ python/branches/py3k/Modules/socketmodule.c Wed Nov 21 23:09:45 2007
@@ -947,7 +947,7 @@
 #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 @@
 
                        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 @@
                                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 @@
        }
        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 @@
                                "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 @@
        }
 
        /* 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 @@
        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 @@
                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 @@
        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 @@
        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 @@
        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 @@
        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 @@
     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 @@
                        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 @@
                        "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");
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to