aboutsummaryrefslogtreecommitdiffstats
path: root/sources
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-06-08 15:47:08 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-06-08 22:04:43 +0200
commit5c3002ebae8e31b3aa05a43e418b196653b041d6 (patch)
tree2af5dee9446e9500e8fedce173d5164b6339a114 /sources
parent15b509e4ab51a0a999190ef4f567a79cbdb541f3 (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.cpp14
-rw-r--r--sources/shiboken2/libshiboken/sbkenum.cpp14
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);