]> granicus.if.org Git - python/commitdiff
Issue #26764: Fixed SystemError in bytes.__rmod__.
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 15 Apr 2016 11:11:10 +0000 (14:11 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Fri, 15 Apr 2016 11:11:10 +0000 (14:11 +0300)
Lib/test/test_bytes.py
Objects/bytesobject.c

index bd3410f7e48c111b0616234e0fe2a7ac838d6cf5..966e287afee43ca45ef4fdbd8c58e93439301539 100644 (file)
@@ -483,26 +483,33 @@ class BaseBytesTest:
         self.assertRaises(ValueError, b.rindex, w, 1, 3)
 
     def test_mod(self):
-        b = b'hello, %b!'
+        b = self.type2test(b'hello, %b!')
         orig = b
         b = b % b'world'
         self.assertEqual(b, b'hello, world!')
         self.assertEqual(orig, b'hello, %b!')
         self.assertFalse(b is orig)
-        b = b'%s / 100 = %d%%'
+        b = self.type2test(b'%s / 100 = %d%%')
         a = b % (b'seventy-nine', 79)
         self.assertEqual(a, b'seventy-nine / 100 = 79%')
+        self.assertIs(type(a), bytes)
 
     def test_imod(self):
-        b = b'hello, %b!'
+        b = self.type2test(b'hello, %b!')
         orig = b
         b %= b'world'
         self.assertEqual(b, b'hello, world!')
         self.assertEqual(orig, b'hello, %b!')
         self.assertFalse(b is orig)
-        b = b'%s / 100 = %d%%'
+        b = self.type2test(b'%s / 100 = %d%%')
         b %= (b'seventy-nine', 79)
         self.assertEqual(b, b'seventy-nine / 100 = 79%')
+        self.assertIs(type(b), bytes)
+
+    def test_rmod(self):
+        with self.assertRaises(TypeError):
+            object() % self.type2test(b'abc')
+        self.assertIs(self.type2test(b'abc').__rmod__('%r'), NotImplemented)
 
     def test_replace(self):
         b = self.type2test(b'mississippi')
@@ -1064,28 +1071,6 @@ class ByteArrayTest(BaseBytesTest, unittest.TestCase):
         b[8:] = b
         self.assertEqual(b, bytearray(list(range(8)) + list(range(256))))
 
-    def test_mod(self):
-        b = bytearray(b'hello, %b!')
-        orig = b
-        b = b % b'world'
-        self.assertEqual(b, b'hello, world!')
-        self.assertEqual(orig, bytearray(b'hello, %b!'))
-        self.assertFalse(b is orig)
-        b = bytearray(b'%s / 100 = %d%%')
-        a = b % (b'seventy-nine', 79)
-        self.assertEqual(a, bytearray(b'seventy-nine / 100 = 79%'))
-
-    def test_imod(self):
-        b = bytearray(b'hello, %b!')
-        orig = b
-        b %= b'world'
-        self.assertEqual(b, b'hello, world!')
-        self.assertEqual(orig, bytearray(b'hello, %b!'))
-        self.assertFalse(b is orig)
-        b = bytearray(b'%s / 100 = %d%%')
-        b %= (b'seventy-nine', 79)
-        self.assertEqual(b, bytearray(b'seventy-nine / 100 = 79%'))
-
     def test_iconcat(self):
         b = bytearray(b"abc")
         b1 = b
index b935375e2305fcd686c4b3b17636e6d9a7dad418..ec03233ba384a391e670f35b08a7372148669c43 100644 (file)
@@ -3282,15 +3282,13 @@ bytes_methods[] = {
 };
 
 static PyObject *
-bytes_mod(PyObject *self, PyObject *args)
+bytes_mod(PyObject *self, PyObject *arg)
 {
-    if (self == NULL || !PyBytes_Check(self)) {
-        PyErr_BadInternalCall();
-        return NULL;
+    if (!PyBytes_Check(self)) {
+        Py_RETURN_NOTIMPLEMENTED;
     }
-
     return _PyBytes_FormatEx(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
-                             args, 0);
+                             arg, 0);
 }
 
 static PyNumberMethods bytes_as_number = {