New submission from JP Sugarbroad <tar...@gmail.com>:
The following code will likely crash on I32LP64 systems: dim = lib.get_array_size(opaque) ptrs = (c_void_p * dim)() lib.get_array_values(opaque, ptrs) for ptr in ptrs: print(lib.get_object_value(ptr)) What happens is that `ptr` is not a `c_void_p` -- it's just a bare number. And when it's passed to another function it goes in as a (32-bit) `c_int`, resulting in a truncation. I'm not sure what can be done here (maybe a truncation warning?) but it's definitely a difficult bug to notice when reviewing code. ---------- components: ctypes messages: 414783 nosy: taralx priority: normal severity: normal status: open title: c_void_p array is a footgun on I32LP64 systems type: behavior versions: Python 3.10, Python 3.11, Python 3.7, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue46966> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com