Skip to content

ctypes.CDLL does no longer honor the handle argument starting Python 3.13.10+ & 3.14.1+? #143304

Closed

Description

@leofang

Bug report

Bug description:

By inspecting the source code, I noticed that in the 3.12 branch handle is still used:

if handle is None:
self._handle = _dlopen(self._name, mode)
else:
self._handle = handle

but starting 3.13 & Unix-like systems it is not:
def _load_library(self, name, mode, handle, winmode):
# If the filename that has been provided is an iOS/tvOS/watchOS
# .fwork file, dereference the location to the true origin of the
# binary.
if name and name.endswith(".fwork"):
with open(name) as f:
name = _os.path.join(
_os.path.dirname(_sys.executable),
f.read().strip()
)
if _sys.platform.startswith("aix"):
"""When the name contains ".a(" and ends with ")",
e.g., "libFOO.a(libFOO.so)" - this is taken to be an
archive(member) syntax for dlopen(), and the mode is adjusted.
Otherwise, name is presented to dlopen() as a file argument.
"""
if name and name.endswith(")") and ".a(" in name:
mode |= _os.RTLD_MEMBER | _os.RTLD_NOW
self._name = name
return _dlopen(name, mode)

where handle is passed to CDLL._load_library() but is not used at all. Instead, _dlopen() is always called to populate self._handle.

A quick check shows that this starts fairly recently, Python 3.13.10+ & 3.14.1+. It seems to me like a refactoring bug introduced in #136878, #138546, #138547 IIUC.

CPython versions tested on:

3.13

Operating systems tested on:

No response

Linked PRs

Activity

  1. added
    3.13only security fixes
    3.14bugs and security fixes
    3.15bugs and security fixes
    on Dec 31, 2025
  2. added 2 commits that reference this issue on Dec 31, 2025
    8634db5
    bb4c92e
  3. added a commit that references this issue on Feb 24, 2026
  4. added 2 commits that reference this issue on Feb 24, 2026
  5. added a commit that references this issue on Feb 28, 2026
  6. added 2 commits that reference this issue on Mar 5, 2026
  7. added a commit that references this issue on Apr 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13only security fixes3.14bugs and security fixes3.15bugs and security fixesstdlibStandard Library Python modules in the Lib/ directorytopic-ctypestype-bugAn unexpected behavior, bug, or error

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions