Skip to content

Commit 6bd37cc

Browse files
committed
[processing] Fix crash when editing models on Windows (fix #17028)
1 parent 4a974ea commit 6bd37cc

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

python/core/conversions.sip

100644100755
+16-12
Original file line numberDiff line numberDiff line change
@@ -1213,38 +1213,42 @@ template<TYPE2>
12131213
if (!d)
12141214
return NULL;
12151215

1216-
const sipMappedType *qlist_type = sipFindMappedType("QList<TYPE2>");
1217-
12181216
// Set the dictionary elements.
12191217
QMap<QString, QList< TYPE2 > >::const_iterator i;
12201218

12211219
for (i = sipCpp->constBegin(); i != sipCpp->constEnd(); ++i)
12221220
{
12231221
QString *t1 = new QString(i.key());
1224-
12251222
PyObject *t1obj = sipConvertFromNewType(t1, sipType_QString, sipTransferObj);
12261223

1227-
QList< TYPE2 > *t2 = new QList< TYPE2 >( i.value() );
1228-
1229-
PyObject *t2obj = sipConvertFromMappedType(t2, qlist_type, sipTransferObj);
1224+
// build list for dictionary value
1225+
QList< TYPE2 > sourceList = i.value();
1226+
PyObject *t2list = PyList_New( sourceList.size() );
1227+
if ( t2list )
1228+
{
1229+
for ( int j = 0; j < sourceList.size(); j++ )
1230+
{
1231+
TYPE2 *t = new TYPE2(sourceList.at(j));
1232+
PyObject *lobj = sipConvertFromNewType(t, sipType_TYPE2, sipTransferObj);
1233+
PyList_SetItem( t2list, j, lobj );
1234+
}
1235+
}
12301236

1231-
if (t1obj == NULL || t2obj == NULL || PyDict_SetItem(d, t1obj, t2obj) < 0)
1237+
if (t1obj == NULL || t2list == NULL || PyDict_SetItem(d, t1obj, t2list) < 0)
12321238
{
12331239
Py_DECREF(d);
12341240

12351241
if (t1obj)
12361242
Py_DECREF(t1obj);
12371243

1238-
if (t2obj)
1239-
Py_DECREF(t2obj);
1240-
else
1241-
delete t2;
1244+
if (t2list)
1245+
Py_DECREF(t2list);
12421246

12431247
return NULL;
12441248
}
12451249

12461250
Py_DECREF(t1obj);
1247-
Py_DECREF(t2obj);
1251+
Py_DECREF(t2list);
12481252
}
12491253

12501254
return d;

0 commit comments

Comments
 (0)