2011-08-03 13:47:44 |
shen139 |
description |
A C programs crash after the second call to Py_Finalize() if lxml is used.
Tested with Python 2.5, 2.7 and 3.2. (etree.LXML_VERSION: (2, 3, 0, 0)) under Ubuntu 11.04.
The C code:
-[
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int x;
for(x=0;x<10;x++)
{
printf(" + Py_Initialize (%d)...\n", x);
Py_Initialize();
printf(" + PyRun_SimpleString...\n");
PyRun_SimpleString("from lxml import etree\n" \
"print ' - etree.LXML_VERSION: ', etree.LXML_VERSION\n" \
"print ' - etree.parse()'\n" \
"tree = etree.parse('test.xml')\n" \
"print ' - ok'\n");
printf(" + Py_Finalize...\n\n");
Py_Finalize();
}
return 1;
}
]-
Compiled with:
shen139@vega:~/test$ gcc test-lxml.c -I/usr/include/python2.7 -I/usr/include/python2.7 -o test-lxml.o -L/usr/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
Using:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
The output:
-[
shen139@vega:~/test$ ./test-lxml.o
+ Py_Initialize (0)...
+ PyRun_SimpleString...
- etree.LXML_VERSION: (2, 3, 0, 0)
- etree.parse()
- ok
+ Py_Finalize...
+ Py_Initialize (1)...
+ PyRun_SimpleString...
- etree.LXML_VERSION: (2, 3, 0, 0)
- etree.parse()
Segmentation fault
]-
Using:
Version: 3.2 (r32:88445, Mar 25 2011, 19:26:27)
[GCC 4.5.2]
Platform: linux2
Backtrace:
-[
#0 0x001ec991 in PyObject_Malloc () from /usr/lib/libpython3.2mu.so.1.0
#1 0x001ea045 in _PyObject_New () from /usr/lib/libpython3.2mu.so.1.0
#2 0x00205cda in ?? () from /usr/lib/libpython3.2mu.so.1.0
#3 0x0020f3b5 in PyUnicodeUCS4_DecodeUTF8Stateful () from /usr/lib/libpython3.2mu.so.1.0
#4 0x0020f963 in PyUnicodeUCS4_DecodeUTF8 () from /usr/lib/libpython3.2mu.so.1.0
#5 0x00213f29 in PyUnicodeUCS4_Decode () from /usr/lib/libpython3.2mu.so.1.0
#6 0x007eeca8 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#7 0x00820b6c in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#8 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
...
...
#526 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#527 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#528 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#529 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#530 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#531 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
...
...
.... many many many more......
]- |
A C program crashes after the second call to Py_Finalize() if lxml is used.
Tested with Python 2.5, 2.7 and 3.2. (etree.LXML_VERSION: (2, 3, 0, 0)) under Ubuntu 11.04.
The C code:
-[
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int x;
for(x=0;x<10;x++)
{
printf(" + Py_Initialize (%d)...\n", x);
Py_Initialize();
printf(" + PyRun_SimpleString...\n");
PyRun_SimpleString("from lxml import etree\n" \
"print ' - etree.LXML_VERSION: ', etree.LXML_VERSION\n" \
"print ' - etree.parse()'\n" \
"tree = etree.parse('test.xml')\n" \
"print ' - ok'\n");
printf(" + Py_Finalize...\n\n");
Py_Finalize();
}
return 1;
}
]-
Compiled with:
shen139@vega:~/test$ gcc test-lxml.c -I/usr/include/python2.7 -I/usr/include/python2.7 -o test-lxml.o -L/usr/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
Using:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
The output:
-[
shen139@vega:~/test$ ./test-lxml.o
+ Py_Initialize (0)...
+ PyRun_SimpleString...
- etree.LXML_VERSION: (2, 3, 0, 0)
- etree.parse()
- ok
+ Py_Finalize...
+ Py_Initialize (1)...
+ PyRun_SimpleString...
- etree.LXML_VERSION: (2, 3, 0, 0)
- etree.parse()
Segmentation fault
]-
Using:
Version: 3.2 (r32:88445, Mar 25 2011, 19:26:27)
[GCC 4.5.2]
Platform: linux2
Backtrace:
-[
#0 0x001ec991 in PyObject_Malloc () from /usr/lib/libpython3.2mu.so.1.0
#1 0x001ea045 in _PyObject_New () from /usr/lib/libpython3.2mu.so.1.0
#2 0x00205cda in ?? () from /usr/lib/libpython3.2mu.so.1.0
#3 0x0020f3b5 in PyUnicodeUCS4_DecodeUTF8Stateful () from /usr/lib/libpython3.2mu.so.1.0
#4 0x0020f963 in PyUnicodeUCS4_DecodeUTF8 () from /usr/lib/libpython3.2mu.so.1.0
#5 0x00213f29 in PyUnicodeUCS4_Decode () from /usr/lib/libpython3.2mu.so.1.0
#6 0x007eeca8 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#7 0x00820b6c in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#8 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
...
...
#526 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#527 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#528 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#529 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#530 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#531 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
...
...
.... many many many more......
]- |
|