From 0103ade603b321aa66e5bfc7a5a078219e888481 Mon Sep 17 00:00:00 2001 From: Roger Binns Date: Mon, 7 Oct 2024 07:13:54 -0700 Subject: [PATCH] Disable infinite recursion test in non-debug builds You'll need a wide window to read this This is the backtrace on Ubuntu 24.10 with Python 3.12.7 - it has occurred on versions too Thread 1 "python3" received signal SIGSEGV, Segmentation fault. #0 0x00007ffff7c6c804 in __printf_buffer (buf=buf@entry=0x7fffff7ff240, format=0x71cdf5 "%zd", ap=0x7fffff7ff290, mode_flags=6) at ./stdio-common/vfprintf-internal.c:600 #1 0x00007ffff7c8dc93 in __vsprintf_internal (string=string@entry=0x7fffff7ff430 "", maxlen=maxlen@entry=26, format=, args=args@entry=0x7fffff7ff290, mode_flags=mode_flags@entry=6) at ./libio/iovsprintf.c:62 #2 0x00007ffff7d4228f in ___sprintf_chk (s=s@entry=0x7fffff7ff430 "", flag=flag@entry=2, slen=slen@entry=26, format=) at ./debug/sprintf_chk.c:40 #3 0x00000000005abf85 in sprintf (__s=, __fmt=) at /usr/include/x86_64-linux-gnu/bits/stdio2.h:30 #4 unicode_fromformat_arg (writer=0x7fffff7ff3f0, f=0x71cdf7 "d", vargs=0x7fffff7ff3d8) at ../Objects/unicodeobject.c:2740 #5 PyUnicode_FromFormatV (format=, vargs=vargs@entry=0x7fffff7ff4a8) at ../Objects/unicodeobject.c:2963 #6 0x00000000005b3c6f in PyUnicode_FromFormat (format=format@entry=0x71cdf5 "%zd") at ../Objects/unicodeobject.c:3011 #7 0x00000000005d7a3e in too_many_positional (co=, tstate=0xbae310 <_PyRuntime+458992>, given=2, defaults=, localsplus=0x7ffff7fb0cb0, qualname='APSW.testIssue425..handler') at ../Python/ceval.c:1150 #8 initialize_locals (tstate=tstate@entry=0xbae310 <_PyRuntime+458992>, func=func@entry=0x7fffe9094ae0, localsplus=, args=, argcount=, kwnames=) at ../Python/ceval.c:1459 #9 0x00000000005d7642 in _PyEvalFramePushAndInit (tstate=0xbae310 <_PyRuntime+458992>, func=0x7fffe9094ae0, locals=, args=0x7fffff7ff708, argcount=, kwnames=0x0) at ../Python/ceval.c:1594 #10 _PyEval_Vector (tstate=0xbae310 <_PyRuntime+458992>, func=0x7fffe9094ae0, locals=, args=0x7fffff7ff708, argcount=2, kwnames=0x0) at ../Python/ceval.c:1677 #11 0x000000000054a2d5 in _PyObject_VectorcallTstate (tstate=0xbae310 <_PyRuntime+458992>, callable=, args=, nargsf=, kwnames=) at ../Include/internal/pycore_call.h:92 #12 PyObject_Vectorcall (callable=, args=, nargsf=, kwnames=) at ../Objects/call.c:325 #13 0x00007fffe96aa94c in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff7ff770 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:447 #14 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff7ff880) at sqlite3/sqlite3.c:32459 #15 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 #16 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 #17 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff7ffbc0 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 #18 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff7ffcd0) at sqlite3/sqlite3.c:32459 #19 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 #20 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 #21 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff800010 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 #22 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff800120) at sqlite3/sqlite3.c:32459 #23 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 #24 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 #25 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff800460 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 #26 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff800570) at sqlite3/sqlite3.c:32459 #27 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 #28 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 #29 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff8008b0 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 #30 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff8009c0) at sqlite3/sqlite3.c:32459 #31 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 #32 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 #33 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff800d00 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 #34 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff800e10) at sqlite3/sqlite3.c:32459 #35 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 #36 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 These repeat because that is the point of the test until you get into the Python test code. --- apsw/tests.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apsw/tests.py b/apsw/tests.py index a349533b..bfec8e9f 100644 --- a/apsw/tests.py +++ b/apsw/tests.py @@ -1188,6 +1188,14 @@ def testIssue376(self): def testIssue425(self): "Infinite recursion" + # When Python tries to output an error message after reaching + # the recursion limit it can segv which is nothing to do with + # the apsw code, and the Python code looks good to me. Debug + # Python builds don't have this problem. See the commit + # message for this change for backtrace etc. + if "d" not in getattr(sys, "abiflags", ""): + return + class VFSA(apsw.VFS): def __init__(self):