Skip to content

Commit 864bc2a

Browse files
authored
Prevent division by zero (#335)
* Prevent division by zero * Throw exception is size = 0
1 parent 52b8cb0 commit 864bc2a

1 file changed

Lines changed: 21 additions & 12 deletions

File tree

Plugin/src/SofaPython3/DataHelper.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,8 @@ py::buffer_info toBufferInfo(BaseData& m)
362362

363363
py::object convertToPython(BaseData* d)
364364
{
365+
assert(d != nullptr);
366+
365367
const AbstractTypeInfo& nfo{ *(d->getValueTypeInfo()) };
366368
if(hasArrayFor(d)){
367369
return getPythonArrayFor(d);
@@ -377,21 +379,28 @@ py::object convertToPython(BaseData* d)
377379
}
378380
else
379381
{
380-
size_t dim0 = nfo.size(d->getValueVoidPtr())/nfo.size();
381-
size_t dim1 = nfo.size();
382-
for(size_t i=0;i<dim0;i++)
382+
if (nfo.size() != 0)
383383
{
384-
py::list list1;
385-
for(size_t j=0;j<dim1;j++)
384+
size_t dim0 = nfo.size(d->getValueVoidPtr())/nfo.size();
385+
size_t dim1 = nfo.size();
386+
for(size_t i=0;i<dim0;i++)
386387
{
387-
if(nfo.Integer())
388-
list1.append(nfo.getIntegerValue(d->getValueVoidPtr(),i*dim1+j));
389-
else if(nfo.Scalar())
390-
list1.append(nfo.getScalarValue(d->getValueVoidPtr(),i*dim1+j));
391-
else
392-
throw py::type_error("Invalid type");
388+
py::list list1;
389+
for(size_t j=0;j<dim1;j++)
390+
{
391+
if(nfo.Integer())
392+
list1.append(nfo.getIntegerValue(d->getValueVoidPtr(),i*dim1+j));
393+
else if(nfo.Scalar())
394+
list1.append(nfo.getScalarValue(d->getValueVoidPtr(),i*dim1+j));
395+
else
396+
throw py::type_error("Invalid type");
397+
}
398+
list.append(list1);
393399
}
394-
list.append(list1);
400+
}
401+
else
402+
{
403+
throw std::runtime_error("Abstract type info corresponding to Data " + d->getName() + " is empty\n");
395404
}
396405
}
397406
return std::move(list);

0 commit comments

Comments
 (0)