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();
|
auto self_value_and_holder = value_and_holder();
|
||||||
if (overloads->is_constructor) {
|
if (overloads->is_constructor) {
|
||||||
if (!PyObject_TypeCheck(parent.ptr(), (PyTypeObject *) overloads->scope.ptr())) {
|
if (!parent || !PyObject_TypeCheck(parent.ptr(), (PyTypeObject *) overloads->scope.ptr())) {
|
||||||
PyErr_SetString(PyExc_TypeError, "__init__(self, ...) called with invalid `self` argument");
|
PyErr_SetString(PyExc_TypeError, "__init__(self, ...) called with invalid or missing `self` argument");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,7 +486,9 @@ def test_invalid_self():
|
|||||||
# Same as above, but for a class with an alias:
|
# Same as above, but for a class with an alias:
|
||||||
class BrokenTF6(m.TestFactory6):
|
class BrokenTF6(m.TestFactory6):
|
||||||
def __init__(self, bad):
|
def __init__(self, bad):
|
||||||
if bad == 1:
|
if bad == 0:
|
||||||
|
m.TestFactory6.__init__()
|
||||||
|
elif bad == 1:
|
||||||
a = m.TestFactory2(tag.pointer, 1)
|
a = m.TestFactory2(tag.pointer, 1)
|
||||||
m.TestFactory6.__init__(a, tag.base, 1)
|
m.TestFactory6.__init__(a, tag.base, 1)
|
||||||
elif bad == 2:
|
elif bad == 2:
|
||||||
@ -506,13 +508,13 @@ def test_invalid_self():
|
|||||||
BrokenTF1(arg)
|
BrokenTF1(arg)
|
||||||
assert (
|
assert (
|
||||||
str(excinfo.value)
|
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:
|
with pytest.raises(TypeError) as excinfo:
|
||||||
BrokenTF6(arg)
|
BrokenTF6(arg)
|
||||||
assert (
|
assert (
|
||||||
str(excinfo.value)
|
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