diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-06-08 15:47:08 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-06-08 22:04:43 +0200 |
commit | 5c3002ebae8e31b3aa05a43e418b196653b041d6 (patch) | |
tree | 2af5dee9446e9500e8fedce173d5164b6339a114 /sources | |
parent | 15b509e4ab51a0a999190ef4f567a79cbdb541f3 (diff) |
Fix some leaks in enumeration creation
Create the PyType_Spec on the stack.
Task-number: PYSIDE-1321
Change-Id: Ie340dffe1915f99f81caec74432cff9359764001
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources')
-rw-r--r-- | sources/pyside2/libpyside/pysideqflags.cpp | 14 | ||||
-rw-r--r-- | sources/shiboken2/libshiboken/sbkenum.cpp | 14 |
2 files changed, 14 insertions, 14 deletions
diff --git a/sources/pyside2/libpyside/pysideqflags.cpp b/sources/pyside2/libpyside/pysideqflags.cpp index d7e6b4f4c..b141ce157 100644 --- a/sources/pyside2/libpyside/pysideqflags.cpp +++ b/sources/pyside2/libpyside/pysideqflags.cpp @@ -175,18 +175,18 @@ namespace QFlags // PYSIDE-747: Here we insert now the full class name. strcpy(qualname, name); // Careful: SbkType_FromSpec does not allocate the string. - PyType_Spec *newspec = new PyType_Spec; - newspec->name = strdup(qualname); - newspec->basicsize = SbkNewQFlagsType_spec.basicsize; - newspec->itemsize = SbkNewQFlagsType_spec.itemsize; - newspec->flags = SbkNewQFlagsType_spec.flags; + PyType_Spec newspec; + newspec.name = strdup(qualname); + newspec.basicsize = SbkNewQFlagsType_spec.basicsize; + newspec.itemsize = SbkNewQFlagsType_spec.itemsize; + newspec.flags = SbkNewQFlagsType_spec.flags; int idx = -1; while (numberMethods[++idx].slot) { assert(SbkNewQFlagsType_slots[idx].slot == numberMethods[idx].slot); SbkNewQFlagsType_slots[idx].pfunc = numberMethods[idx].pfunc; } - newspec->slots = SbkNewQFlagsType_spec.slots; - PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(newspec); + newspec.slots = SbkNewQFlagsType_spec.slots; + PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(&newspec); Py_TYPE(type) = &PyType_Type; PySideQFlagsType *flagsType = reinterpret_cast<PySideQFlagsType *>(type); diff --git a/sources/shiboken2/libshiboken/sbkenum.cpp b/sources/shiboken2/libshiboken/sbkenum.cpp index 36f2f48f9..f9a43845a 100644 --- a/sources/shiboken2/libshiboken/sbkenum.cpp +++ b/sources/shiboken2/libshiboken/sbkenum.cpp @@ -720,11 +720,11 @@ newTypeWithName(const char *name, { // Careful: SbkType_FromSpec does not allocate the string. PyType_Slot newslots[99] = {}; // enough but not too big for the stack - auto *newspec = new PyType_Spec; - newspec->name = strdup(name); - newspec->basicsize = SbkNewType_spec.basicsize; - newspec->itemsize = SbkNewType_spec.itemsize; - newspec->flags = SbkNewType_spec.flags; + PyType_Spec newspec; + newspec.name = strdup(name); + newspec.basicsize = SbkNewType_spec.basicsize; + newspec.itemsize = SbkNewType_spec.itemsize; + newspec.flags = SbkNewType_spec.flags; // we must append all the number methods, so rebuild everything: int idx = 0; while (SbkNewType_slots[idx].slot) { @@ -734,8 +734,8 @@ newTypeWithName(const char *name, } if (numbers_fromFlag) copyNumberMethods(numbers_fromFlag, newslots, &idx); - newspec->slots = newslots; - auto *type = reinterpret_cast<PyTypeObject *>(SbkType_FromSpec(newspec)); + newspec.slots = newslots; + auto *type = reinterpret_cast<PyTypeObject *>(SbkType_FromSpec(&newspec)); Py_TYPE(type) = SbkEnumType_TypeF(); auto *enumType = reinterpret_cast<SbkEnumType *>(type); |