]> granicus.if.org Git - python/commitdiff
Bug 1688393. Adds a control of negative values in
authorFacundo Batista <facundobatista@gmail.com>
Wed, 28 Mar 2007 03:45:20 +0000 (03:45 +0000)
committerFacundo Batista <facundobatista@gmail.com>
Wed, 28 Mar 2007 03:45:20 +0000 (03:45 +0000)
socket.recvfrom, which caused an ugly crash.

Lib/test/test_socket.py
Modules/socketmodule.c

index 5be3dc3b5e17438bd5576329fc741fe1039a9574..24d1a5dd3de294de6b318efbbee297f3a8ce0714 100644 (file)
@@ -597,6 +597,13 @@ class BasicUDPTest(ThreadedUDPSocketTest):
     def _testRecvFrom(self):
         self.cli.sendto(MSG, 0, (HOST, PORT))
 
+    def testRecvFromNegative(self):
+        # Negative lengths passed to recvfrom should give ValueError.
+        self.assertRaises(ValueError, self.serv.recvfrom, -1)
+
+    def _testRecvFromNegative(self):
+        self.cli.sendto(MSG, 0, (HOST, PORT))
+
 class TCPCloserTest(ThreadedTCPSocketTest):
 
     def testClose(self):
index cc54098f6a4de698e3682cc57c99eba673783872..96682ca86d3bbb1f418500f44527bf1c24b927fa 100644 (file)
@@ -2391,7 +2391,7 @@ sock_recv_into(PySocketSockObject *s, PyObject *args, PyObject *kwds)
 
        if (recvlen < 0) {
                PyErr_SetString(PyExc_ValueError,
-                               "negative buffersize in recv");
+                               "negative buffersize in recv_into");
                return NULL;
        }
        if (recvlen == 0) {
@@ -2507,6 +2507,12 @@ sock_recvfrom(PySocketSockObject *s, PyObject *args)
        if (!PyArg_ParseTuple(args, "i|i:recvfrom", &recvlen, &flags))
                return NULL;
 
+       if (recvlen < 0) {
+               PyErr_SetString(PyExc_ValueError,
+                               "negative buffersize in recvfrom");
+               return NULL;
+       }
+
        buf = PyString_FromStringAndSize((char *) 0, recvlen);
        if (buf == NULL)
                return NULL;
@@ -2560,7 +2566,7 @@ sock_recvfrom_into(PySocketSockObject *s, PyObject *args, PyObject* kwds)
 
        if (recvlen < 0) {
                PyErr_SetString(PyExc_ValueError,
-                               "negative buffersize in recv");
+                               "negative buffersize in recvfrom_into");
                return NULL;
        }
        if (recvlen == 0) {