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
ctypes not converting None to Null in 64-bit system #51754
Comments
The attached code is failing to convert None to Null. It is successful The bug disappears if I reduce the number of arguments to less than 10. I created the so using the command - "gcc -shared -fPIC -o libtest.so The c file is as follows: libtest.c
#include <stdint.h>
#include <stdio.h>
int32_t where ( int32_t a, int32_t c, int32_t d, int32_t e, int32_t f,
int32_t g, int32_t h, int32_t *b, int32_t i, int32_t j, int32_t k,
int32_t l)
{
printf("b = %p\n", (void *)b);
printf("a = %d, c = %d, d = %d, e = %d, f = %d, g = %d, h = %d, i =
%d, j = %d, k = %d, l = %d", a,c,d,e,f,g,h,i,j,k,l);
} /* where() */ Python Code: libtest = ctypes.CDLL('./libtest.so')
where = libtest.where
where.restype = ctypes.c_int
where.argtypes = [
ctypes.c_int32, ctypes.c_int32, ctypes.c_int32,
ctypes.c_int32, ctypes.c_int32, ctypes.c_int32, ctypes.c_int32,
ctypes.POINTER(ctypes.c_int32),
ctypes.c_int32, ctypes.c_int32, ctypes.c_int32,
ctypes.c_int32,
]
a = 7
b = None
status = where(a,a,a,a,a,a,a,b,a,a,a,a) |
What is the output of your example? I'm not on Linux at the moment, but I'm trying to see if this is actually a crash. |
The output was a valid pointer which was not null. I did not investigate further on this issue, because I had a work around i.e I used ctypes.POINTER(ctypes.c_cint)() instead of None. |
It works in 64-bit mode under Mandriva Linux (gcc 4.4.1), with Python 2.6, 2.7 and 3.2. $ python issue7505.py
b = (nil)
a = 7, c = 7, d = 7, e = 7, f = 7, g = 7, h = 7, i = 7, j = 7, k = 7, l = 7 I also works with a hand-compiled Python (2.6, 2.7, 3.2) under a 64-bit Ubuntu box. However, it fails with the system Python 2.5 shipped with Ubuntu. So perhaps this has to do with how Debian/Ubuntu compile their Pythons, or their libffi. $ python issue7505.py
b = 0x7f5300000000
a = 7, c = 7, d = 7, e = 7, f = 7, g = 7, h = 7, i = 7, j = 7, k = 7, l = 7 |
Confirm that 2.5 is the only troublesome version, but also when compiled from source (Ubuntu 64-bit, 2.5.5). |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: