diff --git "a/.\\Python-3.5.0b4/Lib/test/test_float.py" "b/.\\Python-3.5.0b4/Lib/test/test_float.py" index 4251090..14a3bc5 100644 --- "a/.\\Python-3.5.0b4/Lib/test/test_float.py" +++ "b/.\\Python-3.5.0b4/Lib/test/test_float.py" @@ -8,6 +8,7 @@ import sys import struct import time import unittest +import array from test import support from math import isinf, isnan, copysign, ldexp @@ -32,6 +33,8 @@ class GeneralFloatCases(unittest.TestCase): self.assertEqual(float(314), 314.0) self.assertEqual(float(" 3.14 "), 3.14) self.assertEqual(float(b" 3.14 "), 3.14) + self.assertEqual(float(bytearray(b" 3.14 ")), 3.14) + self.assertEqual(float(array.array("B", b" 3.14 ")), 3.14) self.assertRaises(ValueError, float, " 0x3.1 ") self.assertRaises(ValueError, float, " -0x3.p-1 ") self.assertRaises(ValueError, float, " +0x3.p-1 ") @@ -44,6 +47,8 @@ class GeneralFloatCases(unittest.TestCase): self.assertRaises(ValueError, float, ".") self.assertRaises(ValueError, float, "-.") self.assertRaises(ValueError, float, b"-") + self.assertRaises(ValueError, float, bytearray(b"A" * 0x10)) + self.assertRaises(ValueError, float, array.array("B", b"A" * 0x10)) self.assertRaises(TypeError, float, {}) self.assertRaisesRegex(TypeError, "not 'dict'", float, {}) # Lone surrogate diff --git "a/.\\Python-3.5.0b4/Objects/floatobject.c" "b/.\\Python-3.5.0b4/Objects/floatobject.c" index d681981..b288f85 100644 --- "a/.\\Python-3.5.0b4/Objects/floatobject.c" +++ "b/.\\Python-3.5.0b4/Objects/floatobject.c" @@ -145,7 +145,17 @@ PyFloat_FromString(PyObject *v) } } else if (PyObject_GetBuffer(v, &view, PyBUF_SIMPLE) == 0) { - s = (const char *)view.buf; + if (PyBytes_Check(v) || PyByteArray_Check(v)) + s = (const char *)view.buf; + else { + s_buffer = PyBytes_FromStringAndSize((const char *)view.buf, + view.len); + if (s_buffer == NULL) { + PyBuffer_Release(&view); + return NULL; + } + s = PyBytes_AsString(s_buffer); + } len = view.len; } else {