]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #20335: bytes constructor now raises TypeError when encoding or errors
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 2 Dec 2014 07:24:06 +0000 (09:24 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Tue, 2 Dec 2014 07:24:06 +0000 (09:24 +0200)
is specified with non-string argument.  Based on patch by Renaud Blanch.

Lib/test/test_bytes.py
Misc/NEWS
Objects/bytesobject.c

index 0177749e212d94e6ac611dc1431a055056e3e691..7b66a5e27893bfad243e880102e5dbcaec658fd6 100644 (file)
@@ -100,6 +100,14 @@ class BaseBytesTest:
         self.assertRaises(TypeError, self.type2test, [0.0])
         self.assertRaises(TypeError, self.type2test, [None])
         self.assertRaises(TypeError, self.type2test, [C()])
+        self.assertRaises(TypeError, self.type2test, 0, 'ascii')
+        self.assertRaises(TypeError, self.type2test, b'', 'ascii')
+        self.assertRaises(TypeError, self.type2test, 0, errors='ignore')
+        self.assertRaises(TypeError, self.type2test, b'', errors='ignore')
+        self.assertRaises(TypeError, self.type2test, '')
+        self.assertRaises(TypeError, self.type2test, '', errors='ignore')
+        self.assertRaises(TypeError, self.type2test, '', b'ascii')
+        self.assertRaises(TypeError, self.type2test, '', 'ascii', b'ignore')
 
     def test_constructor_value_errors(self):
         self.assertRaises(ValueError, self.type2test, [-1])
index d820bb66ed642f6e989efd4ed8a807c895ec5810..f48a794c3bd2cb98c683a78253ac3e31a38a5e89 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -11,6 +11,9 @@ Release date: TBA
 Core and Builtins
 -----------------
 
+- Issue #20335: bytes constructor now raises TypeError when encoding or errors
+  is specified with non-string argument.  Based on patch by Renaud Blanch.
+
 - Issue #22335: Fix crash when trying to enlarge a bytearray to 0x7fffffff
   bytes on a 32-bit platform.
 
index 4a8561cf2f39672c7220bae57055a443ea792e8c..a3ccbcfd613494eebb5f600010d744f4f86a1f3f 100644 (file)
@@ -2503,6 +2503,13 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
         return new;
     }
 
+    /* If it's not unicode, there can't be encoding or errors */
+    if (encoding != NULL || errors != NULL) {
+        PyErr_SetString(PyExc_TypeError,
+            "encoding or errors without a string argument");
+        return NULL;
+    }
+
     /* We'd like to call PyObject_Bytes here, but we need to check for an
        integer argument before deferring to PyBytes_FromObject, something
        PyObject_Bytes doesn't do. */
@@ -2544,13 +2551,6 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
         return new;
     }
 
-    /* If it's not unicode, there can't be encoding or errors */
-    if (encoding != NULL || errors != NULL) {
-        PyErr_SetString(PyExc_TypeError,
-            "encoding or errors without a string argument");
-        return NULL;
-    }
-
     return PyBytes_FromObject(x);
 }