pyosmium icon indicating copy to clipboard operation
pyosmium copied to clipboard

test_nodelist.py makes python interpreter segfault on OpenBSD

Open landryb opened this issue 3 years ago • 4 comments

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.

landryb avatar Apr 14 '22 06:04 landryb

What are the other failing tests? They might give a hint what goes wrong.

lonvia avatar Apr 15 '22 15:04 lonvia

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

landryb avatar Apr 19 '22 06:04 landryb

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.

lonvia avatar May 28 '22 09:05 lonvia

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

landryb avatar Sep 11 '22 10:09 landryb