Union within structure causes segfault
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
python3.2 (Ubuntu) |
New
|
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 0x00007ffff5fab000 in ?? () from /usr/lib/
#1 0x00007ffff5fab12a in ffi_prep_
#2 0x00007ffff5fa77d7 in ffi_prep_cif () from /usr/lib/
#3 0x00007ffff61b82a5 in _ctypes_callproc ()
from /usr/lib/
#4 0x00007ffff61b8aa2 in ?? () from /usr/lib/
#5 0x000000000041ee17 in PyObject_Call ()
#6 0x000000000045c2bc in PyEval_EvalFrameEx ()
#7 0x000000000046002d in PyEval_EvalCodeEx ()
#8 0x0000000000460b9b in PyEval_EvalCode ()
#9 0x0000000000480ce5 in ?? ()
#10 0x0000000000482791 in PyRun_FileExFlags ()
#11 0x00000000004831f9 in PyRun_SimpleFil
#12 0x0000000000494033 in Py_Main ()
#13 0x000000000041d307 in main ()
For reference, I tried this on 64-bit Natty and 32-bit Precise, both of which succeeded. The Python 2.7 interpreter also suffers from this issue.