In FreeCAD 0.17 gibts einen segfault, wenn man einen expat XML Parser aufmacht. Wenn man zB freecad-daily installiert (von launchpad) kann man einfach segfaulten, wenn man das hier in die python konsole reinwirft:
Code: Alles auswählen
from xml.parsers import expat
expat.ParserCreate()
Nun hab ich herausgefunden, dass das expat Modul in freecad angibt mit libexpat 2.0.1 zu laufen. Außerdem sind die features anders. Allerdings sagt er mir, es ist die selbe version und die selbe bytecode datei:
Code: Alles auswählen
>>> expat.features
[('sizeof(XML_Char)', 1), ('sizeof(XML_LChar)', 1)]
>>> expat.EXPAT_VERSION
'expat_2.0.1'
>>> expat.__file__
'/usr/lib/python2.7/xml/parsers/expat.pyc'
>>> expat.__version__
'$Revision: 17640 $'
Code: Alles auswählen
>>> expat.features
[('sizeof(XML_Char)', 1), ('sizeof(XML_LChar)', 1), ('XML_DTD', 0), ('XML_CONTEXT_BYTES', 1024), ('XML_NS', 0)]
>>> expat.EXPAT_VERSION
'expat_2.2.3'
>>> expat.__file__
'/usr/lib/python2.7/xml/parsers/expat.pyc'
>>> expat.__version__
'$Revision: 17640 $'
Das ist auch die gleiche wie bei mir installiert (nur eben aus ubuntu).
Ich hab im source von pyexpat.c nachgeschaut und dort wird EXPAT_VERSION über die Funktion XML_ExpatVersion() gesetzt:
Code: Alles auswählen
PyModule_AddStringConstant(m, "EXPAT_VERSION",
(char *) XML_ExpatVersion());
Vor allem weil ein:
Code: Alles auswählen
$ ldd /usr/bin/freecad-daily | grep expat
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f899e424000)
XML_ExpatVersion() baut den Versionsstring aus den in expat.h definierten Macros zusammen. Ich finde aber nirgends eine Version in der was anderes steht als 2.2.3...
ebenso ist pyexpat die selbe .so, allerdings in zwei verschiedenen versionen?
Code: Alles auswählen
# Freecad
>>> import pyexpat
>>> pyexpat.__file__
'/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so'
>>> pyexpat.EXPAT_VERSION
'expat_2.0.1'
Code: Alles auswählen
python
>>> import pyexpat
>>> pyexpat.__file__
'/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so'
>>> pyexpat.EXPAT_VERSION
'expat_2.2.3'
Ich war erst der Meinung das es sich bei dem Segfault um einen Bug in pyexpat oder expat selber handelt, aber mir scheint es ist einfach ein Build Problem und FreeCAD glaubt einfach eine alte Version zu verwenden?