[issue26595] Segfault on Pointer operation

Emin Ghuliev report at bugs.python.org
Sun Mar 20 10:14:22 EDT 2016


New submission from Emin Ghuliev:

I'm trying use a pointer on python script but when executing the following code getting error. (Segmentation fault)


dmr at debian:~$ python test.py
Segmentation fault


self.mem  = c_char_p(mem)

pointer(self.binning())[0] = 0x41414141


output: 
[----------------------------------registers-----------------------------------]
EAX: 0x0 
EBX: 0xb7aee000 --> 0x21e4c 
ECX: 0x1 
EDX: 0x41414141 ('AAAA')
ESI: 0x41414141 ('AAAA')
EDI: 0x41414141 ('AAAA')
EBP: 0xb7b0eb3c --> 0xc ('\x0c')
ESP: 0xbfffeb74 --> 0x0 
EIP: 0xb7dfc4b6 (<__strlen_sse2_bsf+22>:	movdqu xmm1,XMMWORD PTR [edi])
EFLAGS: 0x10287 (CARRY PARITY adjust zero SIGN trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
   0xb7dfc4ad <__strlen_sse2_bsf+13>:	pxor   xmm0,xmm0
   0xb7dfc4b1 <__strlen_sse2_bsf+17>:	cmp    ecx,0x30
   0xb7dfc4b4 <__strlen_sse2_bsf+20>:	ja     0xb7dfc4cd <__strlen_sse2_bsf+45>
=> 0xb7dfc4b6 <__strlen_sse2_bsf+22>:	movdqu xmm1,XMMWORD PTR [edi]
   0xb7dfc4ba <__strlen_sse2_bsf+26>:	pcmpeqb xmm0,xmm1
   0xb7dfc4be <__strlen_sse2_bsf+30>:	pmovmskb edx,xmm0
   0xb7dfc4c2 <__strlen_sse2_bsf+34>:	test   edx,edx
   0xb7dfc4c4 <__strlen_sse2_bsf+36>:	jne    0xb7dfc539 <__strlen_sse2_bsf+153>
[------------------------------------stack-------------------------------------]


BUG on ctypes module 

.//source/cfield.c:1328

static PyObject *
z_get(void *ptr, unsigned size)
{
        /* XXX What about invalid pointers ??? */
        if (*(void **)ptr) {
#if defined(MS_WIN32) && !defined(_WIN32_WCE)
                if (IsBadStringPtrA(*(char **)ptr, -1)) {
                        PyErr_Format(PyExc_ValueError,
                                     "invalid string pointer %p",
                                     *(char **)ptr);
                        return NULL;
                }
#endif
                return PyString_FromString(*(char **)ptr); < === passing pointer as argument
        } else {
                Py_INCREF(Py_None);
                return Py_None;
        }
}
./Objects/stringobject.c:
PyObject *
PyString_FromString(const char *str = this value assigned to 0x41414141 address)
{
	register size_t size;
	register PyStringObject *op;

	assert(str != NULL);
	size = strlen(str); <==== argument address 0x41414141

----------
files: alloc.py
messages: 262077
nosy: Emin Ghuliev
priority: normal
severity: normal
status: open
title: Segfault on Pointer operation
Added file: http://bugs.python.org/file42224/alloc.py

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue26595>
_______________________________________


More information about the Python-bugs-list mailing list