mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-25 06:35:12 +00:00
fix: catch missing self argument in overloads constructor (#2914)
This commit is contained in:
parent
3df0ee6fe3
commit
c2db53da56
@ -555,8 +555,8 @@ protected:
|
||||
|
||||
auto self_value_and_holder = value_and_holder();
|
||||
if (overloads->is_constructor) {
|
||||
if (!PyObject_TypeCheck(parent.ptr(), (PyTypeObject *) overloads->scope.ptr())) {
|
||||
PyErr_SetString(PyExc_TypeError, "__init__(self, ...) called with invalid `self` argument");
|
||||
if (!parent || !PyObject_TypeCheck(parent.ptr(), (PyTypeObject *) overloads->scope.ptr())) {
|
||||
PyErr_SetString(PyExc_TypeError, "__init__(self, ...) called with invalid or missing `self` argument");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -486,7 +486,9 @@ def test_invalid_self():
|
||||
# Same as above, but for a class with an alias:
|
||||
class BrokenTF6(m.TestFactory6):
|
||||
def __init__(self, bad):
|
||||
if bad == 1:
|
||||
if bad == 0:
|
||||
m.TestFactory6.__init__()
|
||||
elif bad == 1:
|
||||
a = m.TestFactory2(tag.pointer, 1)
|
||||
m.TestFactory6.__init__(a, tag.base, 1)
|
||||
elif bad == 2:
|
||||
@ -506,13 +508,13 @@ def test_invalid_self():
|
||||
BrokenTF1(arg)
|
||||
assert (
|
||||
str(excinfo.value)
|
||||
== "__init__(self, ...) called with invalid `self` argument"
|
||||
== "__init__(self, ...) called with invalid or missing `self` argument"
|
||||
)
|
||||
|
||||
for arg in (1, 2, 3, 4):
|
||||
for arg in (0, 1, 2, 3, 4):
|
||||
with pytest.raises(TypeError) as excinfo:
|
||||
BrokenTF6(arg)
|
||||
assert (
|
||||
str(excinfo.value)
|
||||
== "__init__(self, ...) called with invalid `self` argument"
|
||||
== "__init__(self, ...) called with invalid or missing `self` argument"
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user