Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
1.1.13
-
None
-
linux
Description
We observe a new segfault for mariadb-connector-python in SQLAlchemy's test suite as of version 1.1.13 which does not occur under 1.1.12.
I've unfortunately not been able to create a single reproduction script, as the segfault occurs only when there's a fair number of unrelated modules loaded. The segfault is related to a test that intentionally causes errors on a connection where the backend database has been disconnected. All fairly abusive stuff for sure but the driver should never segfault.
To reproduce the segfault you can run the particular suite in SQLAlchemy. The URI passed should be the username:password@host/dbname of an empty MariaDB database:
git clone https://github.com/sqlalchemy/sqlalchemy
cd sqlalchemy
python -m venv .venv
.venv/bin/pip install pytest typing-extensions mariadb==1.1.13
.venv/bin/pytest test/engine/test_reconnect.py::InvalidateDuringResultTest --uri mariadb+mariadbconnector://scott:tiger@localhost/test
The above test will pass but you'll see Segmentation Fault after that:
test/engine/test_reconnect.py::InvalidateDuringResultTest_mariadb+mariadbconnector_10_11_11::test_invalidate_on_results PASSED [100%]
========================================================================================== 1 passed in 0.03s ==========================================================================================
Segmentation fault (core dumped)
Alternatively, run that whole suite and you'll see a big stack trace with a segfault
$ .venv/bin/pytest test/engine/test_reconnect.py --dburi mariadb+mariadbconnector://scott:tiger@localhost/test
======================================================================================= sqlalchemy installation =======================================================================================
SQLAlchemy 2.1.0b1 (user site loaded)
Path: /home/classic/tmp/sqlalchemy/lib/sqlalchemy/_init_.py
compiled extension not enabled; Modules sqlalchemy.util._collections_cy, sqlalchemy.util._immutabledict_cy, sqlalchemy.engine._processors_cy, sqlalchemy.engine._row_cy, sqlalchemy.engine._util_cy, sqlalchemy.sql._util_cy are not compiled
========================================================================================= test session starts =========================================================================================
platform linux – Python 3.13.3, pytest-8.4.1, pluggy-1.6.0 – /home/classic/tmp/sqlalchemy/.venv/bin/python3.13
cachedir: .pytest_cache
rootdir: /home/classic/tmp/sqlalchemy
configfile: pyproject.toml
collected 56 items
test/engine/test_reconnect.py::CursorErrTest::test_cursor_explode PASSED [ 1%]
test/engine/test_reconnect.py::CursorErrTest::test_cursor_shutdown_in_initialize PASSED [ 3%]
test/engine/test_reconnect.py::InvalidateDuringResultTest_mariadb+mariadbconnector_10_11_11::test_invalidate_on_results PASSED [ 5%]
test/engine/test_reconnect.py::MockReconnectTest::test_check_disconnect_no_cursor Fatal Python error: Segmentation fault
Current thread 0x00007f4be781ab80 (most recent call first):
Garbage-collecting
File "<frozen importlib._bootstrap_external>", line 784 in _compile_bytecode
File "<frozen importlib._bootstrap_external>", line 1155 in get_code
File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1415 in _handle_fromlist
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/dialects/postgresql/base.py", line 1554 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 1026 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/dialects/postgresql/asyncpg.py", line 198 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 1026 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1415 in _handle_fromlist
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/dialects/postgresql/_init_.py", line 12 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 1026 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/dialects/_init_.py", line 48 in _auto_fn
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/util/langhelpers.py", line 437 in load
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/engine/url.py", line 772 in _get_entrypoint
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/engine/create.py", line 536 in create_engine
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/util/deprecations.py", line 281 in warned
File "<string>", line 2 in create_engine
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/testing/engines.py", line 344 in testing_engine
File "/home/classic/tmp/sqlalchemy/test/engine/test_reconnect.py", line 388 in setup_test
File "/home/classic/tmp/sqlalchemy/lib/sqlalchemy/testing/asyncio.py", line 92 in _maybe_async
File "/home/classic/tmp/sqlalchemy/test/../lib/sqlalchemy/testing/plugin/pytestplugin.py", line 564 in setup_test_methods
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/fixtures.py", line 922 in call_fixture_func
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/fixtures.py", line 1195 in pytest_fixture_setup
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/hooks.py", line 512 in __call_
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/fixtures.py", line 1127 in execute
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/fixtures.py", line 639 in _get_active_fixturedef
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/fixtures.py", line 548 in getfixturevalue
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/fixtures.py", line 719 in _fillfixtures
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/python.py", line 1674 in setup
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/runner.py", line 514 in setup
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/runner.py", line 164 in pytest_runtest_setup
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/hooks.py", line 512 in __call_
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/runner.py", line 246 in <lambda>
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/runner.py", line 344 in from_call
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/runner.py", line 245 in call_and_report
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/runner.py", line 130 in runtestprotocol
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/runner.py", line 117 in pytest_runtest_protocol
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/hooks.py", line 512 in __call_
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/main.py", line 367 in pytest_runtestloop
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/hooks.py", line 512 in __call_
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/main.py", line 343 in _main
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/main.py", line 289 in wrap_session
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/_pytest/main.py", line 336 in pytest_cmdline_main
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pluggy/hooks.py", line 512 in __call_
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pytest/config/init_.py", line 175 in main
File "/home/classic/tmp/sqlalchemy/.venv/lib64/python3.13/site-packages/pytest/config/init_.py", line 201 in console_main
File "/home/classic/tmp/sqlalchemy/.venv/bin/pytest", line 8 in <module>
Extension modules: mariadb._mariadb (total: 1)
Segmentation fault (core dumped)
Attachments
Issue Links
- relates to
-
CONPY-319 Add SQLAlchemy test suite to github actions
-
- Open
-