ctypes._CData._b_base_ does not point to root ctypes object
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Hi, I've been writing some binary interface "decoder" in python using ctypes, and one thing confuses me a bit (and also ruins some of my expectations)
The docs say:
The
_b_base_read-only member is the root ctypes object that owns the memory block.
So with this code:
import ctypes
bindata = bytearray(b"AAAABBBBCCCC")
SomeArray = ctypes.c_int * 3
class SomeData(ctypes.Structure):
_fields_ = [
("asdf", SomeArray),
]
class FinalData(ctypes.Structure):
_fields_ = [
("foo", SomeData),
]
x = FinalData.from_buffer(bindata)
print(x)
print(hex(ctypes.addressof(x)))
print(x._b_base_)
print()
foo = x.foo
print(foo)
print(hex(ctypes.addressof(foo)))
print(foo._b_base_)
print()
asdf = foo.asdf
print(asdf)
print(hex(ctypes.addressof(asdf)))
print(asdf._b_base_)
print()
I expect foo._b_base_ and asdf._b_base_ to point to the same FinalData object, meanwhile this is the output:
<__main__.FinalData object at 0x7f3bae3fa5d0>
0x7f3bae6985d0
None
<__main__.SomeData object at 0x7f3bae6597b0>
0x7f3bae6985d0
<__main__.FinalData object at 0x7f3bae3fa5d0>
<__main__.c_int_Array_3 object at 0x7f3bae69e450>
0x7f3bae6985d0
<__main__.SomeData object at 0x7f3bae6597b0>
So instead of root ctypes object, this returns the parent ctypes object. Is this an oversight/bug?
Python version: Python 3.14.0b2
OS: NixOS unstable
Linked PRs
- gh-152623
- gh-152706
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Đọc tài liệu về ctypes._CData.b_base và chạy reproducer được cung cấp trước tiên. Truy vết chuỗi parent của FinalData, SomeData và SomeArray, sau đó dùng các PR được liên kết làm ngữ cảnh; được xem là hoàn tất khi hành vi root-owner được ghi nhận trong tài liệu và phạm vi bao phủ hồi quy khớp với ngữ nghĩa dự kiến.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 25/100