mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Issue #3258: Fix an assertion error (in debug build) and a crash (in
release build) when the format string of a pointer to an incomplete structure is created.
This commit is contained in:
parent
6d6bd4436a
commit
c0b2a807ff
2 changed files with 32 additions and 1 deletions
|
@ -386,6 +386,11 @@ StructUnionType_new(PyTypeObject *type, PyObject *args, PyObject *kwds, int isSt
|
|||
}
|
||||
Py_DECREF(result->tp_dict);
|
||||
result->tp_dict = (PyObject *)dict;
|
||||
dict->format = alloc_format_string(NULL, "B");
|
||||
if (dict->format == NULL) {
|
||||
Py_DECREF(result);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dict->paramfunc = StructUnionType_paramfunc;
|
||||
|
||||
|
@ -907,7 +912,13 @@ PointerType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
if (proto) {
|
||||
StgDictObject *itemdict = PyType_stgdict(proto);
|
||||
assert(itemdict);
|
||||
stgdict->format = alloc_format_string("&", itemdict->format);
|
||||
/* If itemdict->format is NULL, then this is a pointer to an
|
||||
incomplete type. We create a generic format string
|
||||
'pointer to bytes' in this case. XXX Better would be to
|
||||
fix the format string later...
|
||||
*/
|
||||
stgdict->format = alloc_format_string("&",
|
||||
itemdict->format ? itemdict->format : "B");
|
||||
if (stgdict->format == NULL) {
|
||||
Py_DECREF((PyObject *)stgdict);
|
||||
return NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue