Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-105035: fix super() calls on unusual types (e.g. meta-types) #105094

Merged
merged 4 commits into from
May 30, 2023

Conversation

carljm
Copy link
Member

@carljm carljm commented May 30, 2023

The LOAD_SUPER_ATTR optimization was missing the check (found in _PyObject_GetMethod) to restrict the load-method optimization to lookups only against types that use PyObject_GenericGetAttr for their tp_getattro. This excludes, for example, meta-types, which have their own tp_getattro implementation (_Py_type_getattro).

@carljm carljm marked this pull request as ready for review May 30, 2023 16:18
facebook-github-bot pushed a commit to facebookincubator/cinder that referenced this pull request May 30, 2023
Summary:
This bug was discovered in the upstream `LOAD_SUPER_ATTR` implementation
in 3.12b1, and it also exists in the Cinder implementation.

`_PyObject_GetMethod` checks whether the type has a non-standard
`tp_getattro` (i.e. not `PyObject_GenericGetAttr`), and if so, refuses to attempt
the load-method optimization. We didn't have this check in the `super()`
optimization, causing incompatible behavior in the case of a `super()` lookup
on a type with unusual `tp_getattro`, e.g. meta-types.

Upstream fix is python/cpython#105094

Reviewed By: mpage

Differential Revision: D46281340

fbshipit-source-id: 41aba762d3e2925042a3d897a690317ba2767cf2
* main:
  CI: Temporarily skip paths with spaces to avoid error (python#105110)
  pythongh-105071: add missing versionadded directive (python#105097)
  pythongh-80064: Fix is_valid_wide_char() return type (python#105099)
  Small speedup for dataclass __eq__ and __repr__ (python#104904)
  pythongh-103921: Minor PEP-695 fixes to the `ast` module docs (python#105093)
  pythongh-105091: stable_abi.py: Remove "Unixy" check from --all on other platforms (pythonGH-105092)
@carljm carljm merged commit 68c75c3 into python:main May 30, 2023
@carljm carljm added the needs backport to 3.12 bug and security fixes label May 30, 2023
@miss-islington
Copy link
Contributor

Thanks @carljm for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request May 30, 2023
…pythonGH-105094)

(cherry picked from commit 68c75c3)

Co-authored-by: Carl Meyer <carl@oddbird.net>
@bedevere-bot
Copy link

GH-105117 is a backport of this pull request to the 3.12 branch.

@bedevere-bot bedevere-bot removed the needs backport to 3.12 bug and security fixes label May 30, 2023
carljm added a commit that referenced this pull request May 30, 2023
GH-105094) (#105117)

gh-105035: fix super() calls on unusual types (e.g. meta-types) (GH-105094)
(cherry picked from commit 68c75c3)

Co-authored-by: Carl Meyer <carl@oddbird.net>
@carljm carljm deleted the superbadgetattro branch June 5, 2023 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants