[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    [PyQt] Re: [Pyqwt-users] segfaults on linux and mac with sip 4.7.6
From:       "Erick Tryzelaar" <idadesub () users ! sourceforge ! net>
Date:       2008-05-31 2:40:44
Message-ID: 1ef034530805301940y5c518ad8v6961c94925a9b7c2 () mail ! gmail ! com
[Download RAW message or body]

On Fri, May 30, 2008 at 7:06 PM, Erick Tryzelaar
<idadesub@users.sourceforge.net> wrote:
> On Fri, May 30, 2008 at 6:42 PM, Erick Tryzelaar
> <idadesub@users.sourceforge.net> wrote:
>> Actually, this is happening because the pyqwt is doing an "import
>> PyQt4.Qt", which is the thing that's actually segfaulting.
>
> It seems like the segfault is occurring in siplib.c at line 3788, in
> the function createType:
>
> 3784:        for (sup = type->td_supers, i = 0; i < nrsupers; ++i, ++sup)
> 3785:        {
> 3786:            PyObject *st = (PyObject *)getClassType(sup, client);
> 3787:
> 3788:            Py_INCREF(st);
> 3789:            PyTuple_SET_ITEM(bases,i,st);
> 3790:        }
>
> According to gdb, getClassType is returning 0, but I'm not sure why yet.
>

On Fri, May 30, 2008 at 7:06 PM, Erick Tryzelaar
<idadesub@users.sourceforge.net> wrote:
> On Fri, May 30, 2008 at 6:42 PM, Erick Tryzelaar
> <idadesub@users.sourceforge.net> wrote:
>> Actually, this is happening because the pyqwt is doing an "import
>> PyQt4.Qt", which is the thing that's actually segfaulting.
>
> It seems like the segfault is occurring in siplib.c at line 3788, in
> the function createType:

So digging a bit further, this is the code we're interested in:

static sipExportedModuleDef *getClassModule(sipEncodedClassDef *enc,
        sipExportedModuleDef *em)
{
    if (enc->sc_module != 255)
        em = em->em_imports[enc->sc_module].im_module;

    return em;
}

static sipWrapperType *getClassType(sipEncodedClassDef *enc,
        sipExportedModuleDef *em)
{
    return getClassModule(enc, em)->em_types[enc->sc_class];
}

client has this data:

sc_class = 251
sc_module = 1
sc_flag = 1

So, if we evaluate everything out, we have this expression:

client->em_imports[sup->sc_module].im_module->em_types[sup->sc_class]

So, I see that client->em_name is PyQt4.QtWebKit, and the sc_module=1,
and that value is PyQt4.QtNetwork from it's im_name field. It then
tries to find in em_types the 251st index. However:

client->em_imports[sup->sc_module].im_module->em_nrtypes

equals 32. If I'm reading that correctly, it's trying to read a value
that's way past the end of the em_types field. I'm not sure how this
can be happening though.
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic