Union within structure causes segfault
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
python2.7 (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Precise |
Fix Released
|
Undecided
|
Unassigned | ||
python3.2 (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Precise |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
The following C program and python script result in a segmentation fault of the Python interpreter.
C program:
typedef struct AVS_Value AVS_Value;
struct AVS_Value {
short type;
short array_size;
union {
void* clip;
long boolean;
int integer;
float floating;
const char* string;
const AVS_Value* val;
} d;
};
int avs_set_var(void* p, const char* n, AVS_Value v) {
return 0;
}
Python script:
import ctypes
avidll = ctypes.
class AVS_Value(
def __init__(self, val=None):
self.type = 0 # 'i'
self.d.i = 2
class U(ctypes.Union):
_fields_ = [("c", ctypes.c_void_p),
AVS_Value._fields_ = [("type", ctypes.c_short),
avs_set_var = avidll.avs_set_var
avs_set_var.restype = ctypes.c_int
avs_set_
print avs_set_
Run like this:
$ gcc -shared -O0 mylib.c -o libmylib.so
$ python test.py
(segmentation fault)
(gdb) bt
#0 0x00007ffff61d6490 in examine_argument () from /usr/lib/
#1 0x00007ffff61d65ba in ffi_prep_
#2 0x00007ffff61d3447 in ffi_prep_cif () from /usr/lib/
#3 0x00007ffff61c7275 in _ctypes_callproc () from /usr/lib/
#4 0x00007ffff61c7aa2 in PyCFuncPtr_
#5 0x00000000004c7c76 in PyObject_Call ()
#6 0x000000000042aa4a in PyEval_EvalFrameEx ()
#7 0x00000000004317f2 in PyEval_EvalCodeEx ()
#8 0x000000000054b171 in PyRun_FileExFlags ()
#9 0x000000000054b7d8 in PyRun_SimpleFil
#10 0x000000000054c5d6 in Py_Main ()
#11 0x00007ffff68e576d in __libc_start_main () from /lib/x86_
#12 0x000000000041b931 in _start ()
Changed in python3.2 (Ubuntu Precise): | |
status: | New → Fix Released |
Changed in python2.7 (Ubuntu Precise): | |
status: | New → Fix Released |
For reference, I tried this on 64-bit Natty and 32-bit Precise, both of which succeeded. The Python 3.2 interpreter also suffers from this issue.