-
-
Notifications
You must be signed in to change notification settings - Fork 32.6k
Closed
Labels
OS-macdocsDocumentation in the Doc dirDocumentation in the Doc dirtopic-ctypestype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Using ctypes with variadic functions on ARM64 macOS machines seems to improperly pass the arguments, leading to truncation.
Minimal repro:
>>> import ctypes
>>> from ctypes import util
>>> libc = ctypes.CDLL(util.find_library("c"))
>>> libc.printf(b"hello %d world\n", 128_000_000)
hello 0 world
14
This happens regardless of casting it to a ctypes.c_int
explicitly or not.
>>> libc.printf(b"hello %ld world\n", ctypes.c_int(1))
hello 0 world
14
On my regular machine (in this case an x64 Windows machine) it works as expected:
>>> import ctypes
>>> libc = ctypes.cdll.msvcrt
>>> libc.printf(b"hello %d world\n", 128_000_000)
hello 128000000 world
22
Your environment
I do not personally have a macOS machine, but I got a few others who did have a machine test for me. Their versions were as follows:
Machine 1:
Python 3.10.1, macOS 12.3.1 (21E258)
Machine 2:
Python 3.9.13 (v3.9.13:6de2ca5339, May 17 2022, 11:37:23)
[Clang 13.0.0 (clang-1300.0.29.30)] on darwin
macOS-12.2.1-arm64-arm-64bit
Machine 3:
~ % python3 --version
Python 3.9.10
~ % sw_vers
ProductName: macOS
ProductVersion: 12.3.1
BuildVersion: 21E258
- CPython versions tested on: 3.9, 3.10
- Operating system and architecture: ARM64 Apple Silicon macOS
Linked PRs
NCPlayz, fwrs, rtk-rnjn, MadCat9958 and alkatar212trvl
Metadata
Metadata
Assignees
Labels
OS-macdocsDocumentation in the Doc dirDocumentation in the Doc dirtopic-ctypestype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error