Core: Fix memory leaks with PySequence_GetItem

This commit is contained in:
wmayer
2024-05-08 23:40:27 +02:00
parent 5b98af4591
commit 58988a7482
6 changed files with 63 additions and 66 deletions

View File

@@ -576,14 +576,18 @@ int RotationPy::setCustomAttributes(const char* attr, PyObject* obj)
}
}
else if (strcmp(attr, "Axes") == 0) {
if (PySequence_Check(obj) && PySequence_Size(obj) == 2) {
PyObject* vec1 = PySequence_GetItem(obj, 0);
PyObject* vec2 = PySequence_GetItem(obj, 1);
if (PyObject_TypeCheck(vec1, &(VectorPy::Type))
&& PyObject_TypeCheck(vec2, &(VectorPy::Type))) {
this->getRotationPtr()->setValue(*static_cast<VectorPy*>(vec1)->getVectorPtr(),
*static_cast<VectorPy*>(vec2)->getVectorPtr());
return 1;
if (PySequence_Check(obj)) {
Py::Sequence sequence(obj);
if (sequence.size() == 2) {
Py::Object vec1 = sequence.getItem(0);
Py::Object vec2 = sequence.getItem(1);
if (PyObject_TypeCheck(vec1.ptr(), &(VectorPy::Type))
&& PyObject_TypeCheck(vec2.ptr(), &(VectorPy::Type))) {
Base::Vector3d* pt1 = static_cast<VectorPy*>(vec1.ptr())->getVectorPtr();
Base::Vector3d* pt2 = static_cast<VectorPy*>(vec2.ptr())->getVectorPtr();
this->getRotationPtr()->setValue(*pt1, *pt2);
return 1;
}
}
}
}