pyosmium
pyosmium copied to clipboard
test_nodelist.py makes python interpreter segfault on OpenBSD
Porting pyosmium 3.3.0 to OpenBSD, built agaist systemwide libosmium 2.18.0 / protozero 1.7.0, the regression suite blows badly:
===> Regression tests for py3-osmium-3.3.0
============================= test session starts ==============================
platform openbsd7 -- Python 3.9.10, pytest-7.1.0, pluggy-1.0.0
rootdir: /usr/obj/ports/py-osmium-3.3.0-python3/pyosmium-3.3.0
collected 226 items
test/test_dangling_references.py ....................... [ 10%]
test/test_examples.py F.... [ 12%]
test/test_geom.py ............. [ 18%]
test/test_index.py ..F..F [ 20%]
test/test_io.py ........ [ 24%]
test/test_memberlist.py .. [ 25%]
test/test_nodelist.py ..Fatal Python error: Segmentation fault
Current thread 0x0000095b188b3e40 (most recent call first):
File "/usr/obj/ports/py-osmium-3.3.0-python3/pyosmium-3.3.0/lib.openbsd-7.1-amd64-3.9/osmium/osm/__init__.py", line 34 in <lambda>
File "/usr/local/lib/python3.9/site-packages/_pytest/_io/saferepr.py", line 71 in repr_instance
File "/usr/local/lib/python3.9/reprlib.py", line 62 in repr1
File "/usr/local/lib/python3.9/reprlib.py", line 52 in repr
File "/usr/local/lib/python3.9/site-packages/_pytest/_io/saferepr.py", line 60 in repr
File "/usr/local/lib/python3.9/site-packages/_pytest/_io/saferepr.py", line 107 in saferepr
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 727 in repr_args
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 817 in repr_traceback_entry
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 867 in repr_traceback
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 926 in repr_excinfo
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 666 in getrepr
File "/usr/local/lib/python3.9/site-packages/_pytest/nodes.py", line 475 in _repr_failure_py
File "/usr/local/lib/python3.9/site-packages/_pytest/python.py", line 1795 in repr_failure
File "/usr/local/lib/python3.9/site-packages/_pytest/reports.py", line 345 in from_item_and_call
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 365 in pytest_runtest_makereport
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 221 in call_and_report
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 130 in runtestprotocol
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 111 in pytest_runtest_protocol
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 347 in pytest_runtestloop
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 322 in _main
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 268 in wrap_session
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 315 in pytest_cmdline_main
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/config/__init__.py", line 164 in main
File "/usr/local/lib/python3.9/site-packages/_pytest/config/__init__.py", line 187 in console_main
File "/usr/local/lib/python3.9/site-packages/pytest/__main__.py", line 5 in <module>
File "/usr/local/lib/python3.9/runpy.py", line 87 in _run_code
File "/usr/local/lib/python3.9/runpy.py", line 197 in _run_module_as_main
Segmentation fault (core dumped)
looking at the python coredump doesnt help much:
Core was generated by `python3.9'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 thrkill () at /tmp/-:3
3 /tmp/-: No such file or directory.
[Current thread is 1 (process 287249)]
(gdb) bt
#0 thrkill () at /tmp/-:3
#1 <signal handler called>
#2 0x0000095aa70efef1 in ?? () from /usr/obj/ports/py-osmium-3.3.0-python3/pyosmium-3.3.0/lib.openbsd-7.1-amd64-3.9/osmium/osm/_osm.cpython-39.so
#3 0x0000095aa711625b in ?? () from /usr/obj/ports/py-osmium-3.3.0-python3/pyosmium-3.3.0/lib.openbsd-7.1-amd64-3.9/osmium/osm/_osm.cpython-39.so
#4 0x0000095aa70e3f44 in ?? () from /usr/obj/ports/py-osmium-3.3.0-python3/pyosmium-3.3.0/lib.openbsd-7.1-amd64-3.9/osmium/osm/_osm.cpython-39.so
#5 0x0000095a96e3fe95 in cfunction_call () from /usr/local/lib/libpython3.9.so.0.0
#6 0x0000095a96df841d in _PyObject_MakeTpCall () from /usr/local/lib/libpython3.9.so.0.0
#7 0x0000095a96e031c4 in property_descr_get () from /usr/local/lib/libpython3.9.so.0.0
#8 0x0000095a96e446d3 in _PyObject_GenericGetAttrWithDict () from /usr/local/lib/libpython3.9.so.0.0
#9 0x0000095a96e9a9a7 in output_markup () from /usr/local/lib/libpython3.9.so.0.0
#10 0x0000095a96e99deb in build_string () from /usr/local/lib/libpython3.9.so.0.0
#11 0x0000095a96e97f4c in do_string_format () from /usr/local/lib/libpython3.9.so.0.0
#12 0x0000095a96e01f9d in method_vectorcall_VARARGS_KEYWORDS () from /usr/local/lib/libpython3.9.so.0.0
#13 0x0000095a96ee5c01 in call_function () from /usr/local/lib/libpython3.9.so.0.0
#14 0x0000095a96edf8ae in _PyEval_EvalFrameDefault () from /usr/local/lib/libpython3.9.so.0.0
#15 0x0000095a96ee6897 in _PyEval_EvalCode () from /usr/local/lib/libpython3.9.so.0.0
#16 0x0000095a96df8bdc in _PyFunction_Vectorcall () from /usr/local/lib/libpython3.9.so.0.0
#17 0x0000095a96e60b19 in slot_tp_repr () from /usr/local/lib/libpython3.9.so.0.0
#18 0x0000095a96e4310d in PyObject_Repr () from /usr/local/lib/libpython3.9.so.0.0
#19 0x0000095a96e3f95a in cfunction_vectorcall_O () from /usr/local/lib/libpython3.9.so.0.0
#20 0x0000095a96ee5c01 in call_function () from /usr/local/lib/libpython3.9.so.0.0
#21 0x0000095a96ee006e in _PyEval_EvalFrameDefault () from /usr/local/lib/libpython3.9.so.0.0
#22 0x0000095a96df8cc9 in function_code_fastcall () from /usr/local/lib/libpython3.9.so.0.0
#23 0x0000095a96ee5c01 in call_function () from /usr/local/lib/libpython3.9.so.0.0
a second run of the test suite seems to run infinitely on the same test, as if there was an infinite loop.
What are the other failing tests? They might give a hint what goes wrong.
What are the other failing tests? They might give a hint what goes wrong.
you mean the F's in test_examples.py and test_index.py ? with -v, here's what pytest says:
test/test_examples.py::test_amenity_list FAILED [ 10%]
...
test/test_index.py::test_get_unset FAILED [ 19%]
...
test/test_index.py::test_clear FAILED [ 20%]
...
test/test_nodelist.py::test_missing_location_without_location_handler Fatal Python error: Segmentation fault
Current thread 0x00000e559b4c6e40 (most recent call first):
File "/usr/obj/ports/py-osmium-3.3.0-python3/pyosmium-3.3.0/lib.openbsd-7.1-amd64-3.9/osmium/osm/__init__.py", line 34 in <lambda>
File "/usr/local/lib/python3.9/site-packages/_pytest/_io/saferepr.py", line 71 in repr_instance
File "/usr/local/lib/python3.9/reprlib.py", line 62 in repr1
File "/usr/local/lib/python3.9/reprlib.py", line 52 in repr
File "/usr/local/lib/python3.9/site-packages/_pytest/_io/saferepr.py", line 60 in repr
File "/usr/local/lib/python3.9/site-packages/_pytest/_io/saferepr.py", line 107 in saferepr
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 727 in repr_args
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 817 in repr_traceback_entry
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 867 in repr_traceback
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 926 in repr_excinfo
File "/usr/local/lib/python3.9/site-packages/_pytest/_code/code.py", line 666 in getrepr
File "/usr/local/lib/python3.9/site-packages/_pytest/nodes.py", line 475 in _repr_failure_py
File "/usr/local/lib/python3.9/site-packages/_pytest/python.py", line 1795 in repr_failure
File "/usr/local/lib/python3.9/site-packages/_pytest/reports.py", line 345 in from_item_and_call
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 365 in pytest_runtest_makereport
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 221 in call_and_report
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 130 in runtestprotocol
File "/usr/local/lib/python3.9/site-packages/_pytest/runner.py", line 111 in pytest_runtest_protocol
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 347 in pytest_runtestloop
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 322 in _main
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 268 in wrap_session
File "/usr/local/lib/python3.9/site-packages/_pytest/main.py", line 315 in pytest_cmdline_main
File "/usr/local/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/usr/local/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/usr/local/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/usr/local/lib/python3.9/site-packages/_pytest/config/__init__.py", line 164 in main
File "/usr/local/lib/python3.9/site-packages/_pytest/config/__init__.py", line 187 in console_main
File "/usr/local/lib/python3.9/site-packages/pytest/__main__.py", line 5 in <module>
File "/usr/local/lib/python3.9/runpy.py", line 87 in _run_code
File "/usr/local/lib/python3.9/runpy.py", line 197 in _run_module_as_main
The segfault looks to be a secondary issue to whatever makes your tests fail. So my recommendation is, to look closely at the tests that fail without segfaulting and try to find out what the problem is. Unfortunately you are on your own with that. I don't have any experience with OpenBSD.
fwiw, with 3.4.1 i dont have a segfault on this test, but python process runs indefinitely.
with this test neuteured, 4 other tests fail:
FAILED test/test_examples.py::test_amenity_list - ModuleNotFoundError: No mod...
FAILED test/test_index.py::test_get_unset - RuntimeError: id 56 not found
FAILED test/test_index.py::test_clear - RuntimeError: id 593 not found
FAILED test/test_osm.py::test_invalid_location - ValueError: invalid location