Closed
Description
- Include a detailed description of the bug or suggestion
I have a test that causes a segfault when run with pytest, but doesn't when run by python. It happens when passing an empty temporary directory topygit2.Repository
.
# works fine
python3 test_pygit2.py
# segfault
python3 -X faulthandler -m pytest test_pygit2.py
-
pip list
of the virtual environment you are using
Package Version
------------- -------
attrs 17.4.0
cffi 1.11.5
pip 9.0.1
pkg-resources 0.0.0
pluggy 0.6.0
py 1.5.2
pycparser 2.18
pygit2 0.26.3
pytest 3.4.2
setuptools 32.3.1
six 1.11.0
- pytest and operating system versions
- macOS 10.12.6
- Debian buster (so it has the same libgit2 that I have on my mac)
- pytest 3.4.2
- Minimal example if possible
File test_pygit.py
:
from pygit2 import Repository
import tempfile
def test_segfault():
with tempfile.TemporaryDirectory() as tmpdir:
Repository(tmpdir)
if __name__ == '__main__':
test_segfault()
running under pytest:
# python3 -X faulthandler -m pytest test_pygit2.py
=================================== test session starts ===================================
platform linux -- Python 3.6.4+, pytest-3.2.5, py-1.5.2, pluggy-0.4.0
rootdir: /, inifile:
collected 1 item
test_pygit2.py Fatal Python error: Segmentation fault
Current thread 0x00007f1f2a1e6740 (most recent call first):
File "/usr/lib/python3/dist-packages/pygit2/repository.py", line 100 in __repr__
File "/usr/lib/python3/dist-packages/py/_io/saferepr.py", line 38 in _callhelper
File "/usr/lib/python3/dist-packages/py/_io/saferepr.py", line 33 in repr_instance
File "/usr/lib/python3.6/reprlib.py", line 65 in repr1
File "/usr/lib/python3.6/reprlib.py", line 55 in repr
File "/usr/lib/python3/dist-packages/py/_io/saferepr.py", line 38 in _callhelper
File "/usr/lib/python3/dist-packages/py/_io/saferepr.py", line 13 in repr
File "/usr/lib/python3/dist-packages/py/_io/saferepr.py", line 71 in saferepr
File "/usr/lib/python3/dist-packages/_pytest/_code/code.py", line 497 in _saferepr
File "/usr/lib/python3/dist-packages/_pytest/_code/code.py", line 503 in repr_args
File "/usr/lib/python3/dist-packages/_pytest/_code/code.py", line 580 in repr_traceback_entry
File "/usr/lib/python3/dist-packages/_pytest/_code/code.py", line 621 in repr_traceback
File "/usr/lib/python3/dist-packages/_pytest/_code/code.py", line 669 in repr_excinfo
File "/usr/lib/python3/dist-packages/_pytest/_code/code.py", line 435 in getrepr
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 477 in _repr_failure_py
File "/usr/lib/python3/dist-packages/_pytest/python.py", line 576 in _repr_failure_py
File "/usr/lib/python3/dist-packages/_pytest/python.py", line 583 in repr_failure
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 303 in pytest_runtest_makereport
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 159 in call_and_report
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 77 in runtestprotocol
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 63 in pytest_runtest_protocol
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 170 in pytest_runtestloop
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 147 in _main
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 111 in wrap_session
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 140 in pytest_cmdline_main
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
File "/usr/lib/python3/dist-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
File "/usr/lib/python3/dist-packages/_pytest/config.py", line 58 in main
File "/usr/lib/python3/dist-packages/pytest.py", line 73 in <module>
File "/usr/lib/python3.6/runpy.py", line 85 in _run_code
File "/usr/lib/python3.6/runpy.py", line 193 in _run_module_as_main
Segmentation fault
running under python, with correct exception:
# python3 test_pygit2.py
Traceback (most recent call last):
File "test_pygit2.py", line 9, in <module>
test_segfault()
File "test_pygit2.py", line 6, in test_segfault
Repository(tmpdir)
File "/venv/lib/python3.6/site-packages/pygit2/repository.py", line 1184, in __init__
path_backend = init_file_backend(path)
_pygit2.GitError: Repository not found at /tmp/tmp_9_aoab1
I'm assuming this is a pytest error since it works when called from Python, but if that's wrong I can file this against pygit2.