mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
GH-99257: Check the owner's type when specializing slots (GH-99258)
This commit is contained in:
parent
26726c7649
commit
9d69284169
3 changed files with 78 additions and 0 deletions
|
@ -740,6 +740,10 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
|
|||
PyMemberDescrObject *member = (PyMemberDescrObject *)descr;
|
||||
struct PyMemberDef *dmem = member->d_member;
|
||||
Py_ssize_t offset = dmem->offset;
|
||||
if (!PyObject_TypeCheck(owner, member->d_common.d_type)) {
|
||||
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_EXPECTED_ERROR);
|
||||
goto fail;
|
||||
}
|
||||
if (dmem->flags & PY_AUDIT_READ) {
|
||||
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_AUDITED_SLOT);
|
||||
goto fail;
|
||||
|
@ -849,6 +853,10 @@ _Py_Specialize_StoreAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
|
|||
PyMemberDescrObject *member = (PyMemberDescrObject *)descr;
|
||||
struct PyMemberDef *dmem = member->d_member;
|
||||
Py_ssize_t offset = dmem->offset;
|
||||
if (!PyObject_TypeCheck(owner, member->d_common.d_type)) {
|
||||
SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_EXPECTED_ERROR);
|
||||
goto fail;
|
||||
}
|
||||
if (dmem->flags & READONLY) {
|
||||
SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_READ_ONLY);
|
||||
goto fail;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue