From 9923afe13eb01de6e3fc7e4682adf1996299d942 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Tue, 1 Nov 2022 18:08:47 -0300 Subject: [PATCH] Base: Check sequence size in getVectorFromTuple function --- src/Base/GeometryPyCXX.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Base/GeometryPyCXX.h b/src/Base/GeometryPyCXX.h index 83fa45138b..246c9152b9 100644 --- a/src/Base/GeometryPyCXX.h +++ b/src/Base/GeometryPyCXX.h @@ -42,9 +42,14 @@ template inline Vector3 getVectorFromTuple(PyObject* o) { Py::Sequence tuple(o); - T x = static_cast(Py::Float(tuple.getItem(0))); - T y = static_cast(Py::Float(tuple.getItem(1))); - T z = static_cast(Py::Float(tuple.getItem(2))); + if (tuple.size() != 3) { + throw Py::ValueError("Expected sequence of size 3"); + } + + T x = static_cast(Py::Float(tuple[0])); + T y = static_cast(Py::Float(tuple[1])); + T z = static_cast(Py::Float(tuple[2])); + return Vector3(x,y,z); } @@ -160,6 +165,10 @@ public: Vector& operator= (PyObject* rhsp); Vector& operator= (const Base::Vector3d&); Vector& operator= (const Base::Vector3f&); + operator Base::Vector3d() const + { + return toVector(); + } Base::Vector3d toVector() const;