From: Kefu Chai Date: Fri, 18 Jun 2021 13:26:25 +0000 (+0800) Subject: mgr/PyOSDMap: check parameter in constructor X-Git-Tag: v17.1.0~1510^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2c388dabd2bd5b405e4cb21780a3abcba53ce873;p=ceph.git mgr/PyOSDMap: check parameter in constructor * instead abort(), just return a failure, if the input parameter is missing * set a TypeError if the input parameter's type is not expected a typical session looks like: [mgr self-test eval] >>> osdmap = OSDMap() Traceback (most recent call last): File "", line 1, in TypeError: function missing required argument 'osdmap_capsule' (pos 1) [mgr self-test eval] >>> osdmap = OSDMap(1) Traceback (most recent call last): File "", line 1, in TypeError: BasePyOSDMap.__init__() requires a PyCapsule_Type not int Signed-off-by: Kefu Chai --- diff --git a/src/mgr/PyOSDMap.cc b/src/mgr/PyOSDMap.cc index 70813ca52877..44be8e9423ce 100644 --- a/src/mgr/PyOSDMap.cc +++ b/src/mgr/PyOSDMap.cc @@ -191,13 +191,17 @@ BasePyOSDMap_init(BasePyOSDMap *self, PyObject *args, PyObject *kwds) PyObject *osdmap_capsule = nullptr; static const char *kwlist[] = {"osdmap_capsule", NULL}; - if (! PyArg_ParseTupleAndKeywords(args, kwds, "O", - const_cast(kwlist), - &osdmap_capsule)) { - ceph_abort(); + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", + const_cast(kwlist), + &osdmap_capsule)) { + return -1; + } + if (!PyObject_TypeCheck(osdmap_capsule, &PyCapsule_Type)) { + PyErr_Format(PyExc_TypeError, + "Expected a PyCapsule_Type, not %s", + Py_TYPE(osdmap_capsule)->tp_name); return -1; } - ceph_assert(PyObject_TypeCheck(osdmap_capsule, &PyCapsule_Type)); self->osdmap = (OSDMap*)PyCapsule_GetPointer( osdmap_capsule, nullptr);