This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2012年06月15日 08:18 by eli.bendersky, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| issue15075.1.patch | eli.bendersky, 2012年06月15日 17:57 | review | ||
| Messages (10) | |||
|---|---|---|---|
| msg162870 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2012年06月15日 08:18 | |
The XincludeTest test-case in test_xml_etree is now skipped, because it fails in an intermittent manner. I can reproduce the failure when running full regrtest with -j1, but not -j8, and not when run individually. The failure is most likely due to the test itself, in the way it imports the Python ET, leaving _elementtree out. This may be related to http://bugs.python.org/issue14035 |
|||
| msg162881 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2012年06月15日 10:01 | |
After some tinkering I found which test when run before test_xml_etree causes it to crash: $ ./python -m test.regrtest test___all__ test_xml_etree [1/2] test___all__ [2/2] test_xml_etree Fatal Python error: Segmentation fault Current thread 0x00007f771ecec700: File "/home/eliben/python-src/33/Lib/xml/etree/ElementTree.py", line 895 in _namespaces File "/home/eliben/python-src/33/Lib/xml/etree/ElementTree.py", line 843 in write File "/home/eliben/python-src/33/Lib/test/test_xml_etree.py", line 103 in serialize File "/home/eliben/python-src/33/Lib/test/test_xml_etree.py", line 2020 in test_xinclude_default File "/home/eliben/python-src/33/Lib/unittest/case.py", line 385 in _executeTestPart File "/home/eliben/python-src/33/Lib/unittest/case.py", line 440 in run File "/home/eliben/python-src/33/Lib/unittest/case.py", line 492 in __call__ File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 105 in run File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 67 in __call__ File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 105 in run File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 67 in __call__ File "/home/eliben/python-src/33/Lib/test/support.py", line 1282 in run File "/home/eliben/python-src/33/Lib/test/support.py", line 1383 in _run_suite File "/home/eliben/python-src/33/Lib/test/support.py", line 1417 in run_unittest File "/home/eliben/python-src/33/Lib/test/test_xml_etree.py", line 2311 in test_main File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 1238 in runtest_inner File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 919 in runtest File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 710 in main File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 1829 in <module> File "/home/eliben/python-src/33/Lib/runpy.py", line 75 in _run_code File "/home/eliben/python-src/33/Lib/runpy.py", line 162 in _run_module_as_main Segmentation fault (core dumped) Note that this is the Python test crashing. test_xml_etree_c works fine |
|||
| msg162884 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2012年06月15日 10:49 | |
As suspected, the cause is that xinclude_loader manages to somehow import the C version of ET, although test_xml_etree tries to enforce the Python version. This is probably because test___all__ imports all modules and leaves stuff in the import cache. What causes the segfault itself is that C Elements are mixed with Python Elements, and they're incompatible. |
|||
| msg162925 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2012年06月15日 17:57 | |
Here is a patch that solves the current problem. A longer term solution would be to have a cleaner test plan for ET in general, without monkey-patching at all, and without state that causes test-order dependencies. |
|||
| msg162951 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2012年06月16日 03:49 | |
New changeset 5782efaa8d68 by Eli Bendersky in branch 'default': Make the test more resilient to test-run order (closes #15075) http://hg.python.org/cpython/rev/5782efaa8d68 |
|||
| msg162953 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2012年06月16日 03:53 | |
Opened #15083 to track the *actual* solution to this problem, which should restructure the tests to be safer. |
|||
| msg162957 - (view) | Author: Florent Xicluna (flox) * (Python committer) | Date: 2012年06月16日 07:35 | |
> File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 710 in main > File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 1829 in <module> > File "/home/eliben/python-src/33/Lib/runpy.py", line 75 in _run_code > File "/home/eliben/python-src/33/Lib/runpy.py", line 162 in _run_module_as_main > Segmentation fault (core dumped) Even if the ET tests are hacking sys.modules, I assume that the Python interpreter should not crash so badly. It reveals probably a flaw somewhere else. I suggest to re-open this to track the Segmentation fault. |
|||
| msg162967 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2012年06月16日 12:08 | |
No need, the cause for the segfault is known. What happens is that Element objects from the Python module get intermixed with Element objects from the C module, and these are incompatible. The C module traversal functions assume they can cast Elements to a known structure (ElementObject), and when they get the invalid Elements they crash. Adding runtime checks everywhere is too costly. This situation cannot arise in a valid way. |
|||
| msg178654 - (view) | Author: Stefan Behnel (scoder) * (Python committer) | Date: 2012年12月31日 08:34 | |
If runtime checks are needed to prevent mixing arbitrary objects into the tree, then I don't think they should be considered too costly. I agree with Florent that this is worth reopening. It doesn't look like a "Tests" bug to me rather a "Lib"/"XML" bug. |
|||
| msg179124 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2013年01月05日 15:01 | |
I investigated a bit, and type checks were added to protect from such mixing. Please open a new patch with a speficic reproducer if you run into similar problems (interepreter crash). |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:31 | admin | set | github: 59280 |
| 2013年01月05日 15:01:11 | eli.bendersky | set | messages: + msg179124 |
| 2012年12月31日 08:34:58 | scoder | set | nosy:
+ scoder messages: + msg178654 |
| 2012年06月16日 12:08:36 | eli.bendersky | set | messages: + msg162967 |
| 2012年06月16日 07:35:37 | flox | set | messages: + msg162957 |
| 2012年06月16日 03:53:16 | eli.bendersky | set | superseder: Rewrite ElementTree tests in a cleaner and safer way messages: + msg162953 |
| 2012年06月16日 03:49:33 | python-dev | set | status: open -> closed nosy: + python-dev messages: + msg162951 resolution: fixed stage: test needed -> resolved |
| 2012年06月15日 17:57:31 | eli.bendersky | set | files:
+ issue15075.1.patch keywords: + patch messages: + msg162925 |
| 2012年06月15日 10:49:32 | eli.bendersky | set | messages: + msg162884 |
| 2012年06月15日 10:01:43 | eli.bendersky | set | messages: + msg162881 |
| 2012年06月15日 08:34:31 | ncoghlan | set | nosy:
+ ncoghlan |
| 2012年06月15日 08:18:05 | eli.bendersky | create | |