Issue #25659: Merge ctypes fix from 3.6
This commit is contained in:
commit
7d6e9232b1
|
@ -120,5 +120,13 @@ class Test(unittest.TestCase):
|
|||
with self.assertRaises(ValueError):
|
||||
(c_int * 1).from_buffer_copy(a, 16 * sizeof(c_int))
|
||||
|
||||
def test_abstract(self):
|
||||
self.assertRaises(TypeError, Array.from_buffer, bytearray(10))
|
||||
self.assertRaises(TypeError, Structure.from_buffer, bytearray(10))
|
||||
self.assertRaises(TypeError, Union.from_buffer, bytearray(10))
|
||||
self.assertRaises(TypeError, Array.from_buffer_copy, b"123")
|
||||
self.assertRaises(TypeError, Structure.from_buffer_copy, b"123")
|
||||
self.assertRaises(TypeError, Union.from_buffer_copy, b"123")
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
@ -131,6 +131,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #25659: In ctypes, prevent a crash calling the from_buffer() and
|
||||
from_buffer_copy() methods on abstract classes like Array.
|
||||
|
||||
- Issue #28548: In the "http.server" module, parse the protocol version if
|
||||
possible, to avoid using HTTP 0.9 in some error responses.
|
||||
|
||||
|
|
|
@ -463,7 +463,10 @@ CDataType_from_buffer(PyObject *type, PyObject *args)
|
|||
Py_ssize_t offset = 0;
|
||||
|
||||
StgDictObject *dict = PyType_stgdict(type);
|
||||
assert (dict);
|
||||
if (!dict) {
|
||||
PyErr_SetString(PyExc_TypeError, "abstract class");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O|n:from_buffer", &obj, &offset))
|
||||
return NULL;
|
||||
|
@ -531,9 +534,12 @@ CDataType_from_buffer_copy(PyObject *type, PyObject *args)
|
|||
Py_ssize_t offset = 0;
|
||||
PyObject *result;
|
||||
StgDictObject *dict = PyType_stgdict(type);
|
||||
assert (dict);
|
||||
if (!dict) {
|
||||
PyErr_SetString(PyExc_TypeError, "abstract class");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*|n:from_buffer", &buffer, &offset))
|
||||
if (!PyArg_ParseTuple(args, "y*|n:from_buffer_copy", &buffer, &offset))
|
||||
return NULL;
|
||||
|
||||
if (offset < 0) {
|
||||
|
|
Loading…
Reference in New Issue