diff --git "a/.\\Python-3.5.0b4/Lib/test/test_long.py" "b/.\\Python-3.5.0b4/Lib/test/test_long.py" index e025716..17929aa 100644 --- "a/.\\Python-3.5.0b4/Lib/test/test_long.py" +++ "b/.\\Python-3.5.0b4/Lib/test/test_long.py" @@ -381,6 +381,12 @@ class LongTest(unittest.TestCase): self.assertRaises(ValueError, int, '08', 0) self.assertRaises(ValueError, int, '-012395', 0) + # test different buffer types + self.assertEqual(int(bytearray(b'123')), 123) + self.assertEqual(int(array.array('B', b'123')), 123) + self.assertRaises(ValueError, int, bytearray(b'A' * 0x10)) + self.assertRaises(ValueError, int, array.array('B', b'A' * 0x10)) + # invalid bases invalid_bases = [-909, 2**31-1, 2**31, -2**31, -2**31-1, diff --git "a/.\\Python-3.5.0b4/Objects/abstract.c" "b/.\\Python-3.5.0b4/Objects/abstract.c" index 31cc0a8..7a56f11 100644 --- "a/.\\Python-3.5.0b4/Objects/abstract.c" +++ "b/.\\Python-3.5.0b4/Objects/abstract.c" @@ -1314,7 +1314,20 @@ PyNumber_Long(PyObject *o) * doesn't do. In particular int('9\x005') must raise an * exception, not truncate at the null. */ - PyObject *result = _PyLong_FromBytes(view.buf, view.len, 10); + PyObject *result, *bytes; + if (PyBytes_Check(o) || PyByteArray_Check(o)) + result = _PyLong_FromBytes(view.buf, view.len, 10); + else { + bytes = PyBytes_FromStringAndSize((const char *)view.buf, + view.len); + if (bytes == NULL) { + PyBuffer_Release(&view); + return NULL; + } + result = _PyLong_FromBytes(PyBytes_AsString(bytes), + PyBytes_Size(bytes), 10); + Py_DECREF(bytes); + } PyBuffer_Release(&view); return result; }