Compare commits

1 Commits
1.1 ... main

5 changed files with 219 additions and 10 deletions

BIN
apsw-3.42.0.1.tar.gz (Stored with Git LFS)

Binary file not shown.

BIN
apsw-3.46.1.0.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,72 @@
From 0103ade603b321aa66e5bfc7a5a078219e888481 Mon Sep 17 00:00:00 2001
From: Roger Binns <rogerb@rogerbinns.com>
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=<optimised out>, 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=<optimised out>) at ./debug/sprintf_chk.c:40
#3 0x00000000005abf85 in sprintf (__s=<optimised out>, __fmt=<optimised out>) 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=<optimised out>, 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=<optimised out>, tstate=0xbae310 <_PyRuntime+458992>, given=2, defaults=<optimised out>, localsplus=0x7ffff7fb0cb0, qualname='APSW.testIssue425.<locals>.handler') at ../Python/ceval.c:1150
#8 initialize_locals (tstate=tstate@entry=0xbae310 <_PyRuntime+458992>, func=func@entry=0x7fffe9094ae0, localsplus=<optimised out>, args=<optimised out>, argcount=<optimised out>, kwnames=<optimised out>) at ../Python/ceval.c:1459
#9 0x00000000005d7642 in _PyEvalFramePushAndInit (tstate=0xbae310 <_PyRuntime+458992>, func=0x7fffe9094ae0, locals=<optimised out>, args=0x7fffff7ff708, argcount=<optimised out>, kwnames=0x0) at ../Python/ceval.c:1594
#10 _PyEval_Vector (tstate=0xbae310 <_PyRuntime+458992>, func=0x7fffe9094ae0, locals=<optimised out>, args=0x7fffff7ff708, argcount=2, kwnames=0x0) at ../Python/ceval.c:1677
#11 0x000000000054a2d5 in _PyObject_VectorcallTstate (tstate=0xbae310 <_PyRuntime+458992>, callable=<function at remote 0x7fffe9094ae0>, args=<optimised out>, nargsf=<optimised out>, kwnames=<optimised out>) at ../Include/internal/pycore_call.h:92
#12 PyObject_Vectorcall (callable=<function at remote 0x7fffe9094ae0>, args=<optimised out>, nargsf=<optimised out>, kwnames=<optimised out>) at ../Objects/call.c:325
#13 0x00007fffe96aa94c in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff7ff770 "apsw_write_unraisable TypeError: APSW.testIssue425.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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):

View File

@@ -1,3 +1,137 @@
-------------------------------------------------------------------
Tue Aug 19 11:54:17 UTC 2025 - Daniel Garcia <daniel.garcia@suse.com>
- Add upstream patch disable-infinite-recursion-in-tests.patch
gh#rogerbinns/apsw@0103ade60
-------------------------------------------------------------------
Sat Sep 28 19:15:48 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 3.46.1.0:
* The shell dump command outputs the application_id in addition
to the user_version.
-------------------------------------------------------------------
Sun Jun 30 21:32:30 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 3.46.0.1:
* :func:`apsw.ext.query_info` provides the count and names of
bindings parameters. (:issue:`528`)
* Address how errors are handled in VFS xRandomness routine,
that is only called once by SQLite to seed its random number
generator. (:issue:`526`)
* Added :meth:`Connection.vfsname` and updated corresponding
shell command to get the diagnostic names of the vfs stack
for the connection. (:issue:`525`)
* Do not cache :meth:`Connection.pragma` statements to avoid
encryption keys, or pragmas that run during prepare from
being retained. (:issue:`522`)
* :meth:`Connection.pragma` adds keyword schema argument to run
pragma against attached databases. (:issue:`524`)
-------------------------------------------------------------------
Thu Jun 6 08:35:40 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 3.46.0.0:
* Adjusted levels in :func:`apsw.ext.log_sqlite` to be lower
for some SQLite messages like SQLITE_SCHEMA and
SQLITE_NOTICE_RECOVER_WAL (:issue:`518`)
* Previous source releases were signed with PGP. Starting with
this release Sigstore's cosign tool is used
(:ref:`instructions <verifydownload>`). (:issue:`512`)
-------------------------------------------------------------------
Sat Apr 20 14:09:15 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 3.45.3.0:
* No APSW changes.
-------------------------------------------------------------------
Mon Mar 18 10:27:56 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 3.45.2.0:
* Minor doc and tests change due to changed behaviour of
sqlite3_serialize on an empty database, used by
:meth:`Connection.serialize`.
* No APSW changes.
-------------------------------------------------------------------
Sat Jan 20 12:28:34 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 3.45.0.0:
* Correctly handle NULL/None VFS filenames (:issue:`506`)
-------------------------------------------------------------------
Wed Jan 3 09:42:09 UTC 2024 - Dirk Müller <dmueller@suse.com>
- require setuptools
-------------------------------------------------------------------
Sat Dec 2 20:18:36 UTC 2023 - Dirk Müller <dmueller@suse.com>
- update to 3.44.2.0:
* Added `logger` parameter to :func:`apsw.ext.log_sqlite` to
use a specific :class:`logging.Logger` (:issue:`493`)
* Added :func:`apsw.ext.result_string` to turn an result code
into a string, taking into account if it is extended or not.
* Provide detail when C implemented objects are printed. For
example :class:`connections <Connection>` include the filename.
* Added :meth:`URIFilename.parameters` (:issue:`496`)
* :class:`URIFilename` are only valid for the duration of the
:meth:`VFS.xOpen` call. If you save and use the object later
you will get an exception. (:issue:`501`)
-------------------------------------------------------------------
Tue Nov 14 15:52:45 UTC 2023 - Dirk Müller <dmueller@suse.com>
- update to 3.44.0.0:
* Added virtual table :meth:`VTTable.Integrity` support.
* On 64 bit platforms with the amalgamation,
`SQLITE_MAX_MMAP_SIZE SQLite's default limit is 2GB.
* :meth:`Connection.create_aggregate_function` can take a class
with step and final methods. (:issue:`421`)
* Corrected non :pep:`8` :ref:`compliant names <renaming>`.
The old names remain as aliases to the new ones, and your
code will not break.
* :doc:`Exception <exceptions>` handling has been updated, with
multiple exceptions in the same SQLite control flow being
chained together.
-------------------------------------------------------------------
Fri Oct 6 06:51:24 UTC 2023 - ecsos <ecsos@opensuse.org>
- Update to 3.43.1.0
- All C code calling into Python and all C code called by Python
uses vectorcall / fastcall (see PEP 590) which reduces the
overhead of passing and receiving positional and keyword
arguments. (APSW issue 477 APSW issue 446):
* Conversion of arguments from Python values to C values drops
generic PyArg_ParseTupleAndKeywords in favour of direct
processing which is more efficient and allows better
exception messages.
* Running speedtest with a VFS that inherits all methods went
from being 17% slower than pure SQLite to 2% slower.
* A virtual table benchmark takes 35% less time. (Remember that
benchmarks are best case!)
- The shell JSON output modes have been fixed. Mode 'json'
outputs a json array, while mode 'jsonl' does newline delimited
json objects, aka json lines. (APSW issue 483)
- Changes from 3.43.1.0
- This is the last version that supports Python 3.6 and
Python 3.7 (both end of life). The policy as stated in the
about page is that there will be one more APSW release after
a Python version goes end of life supporting that Python
version. (APSW issue 471)
- Added best practice module (APSW issue 460)
- apsw.ext.log_sqlite() outputs SQLite warnings at warning level.
(APSW issue 472)
- sqlite3_stmt_explain is wrapped available as a explain keyword
parameter on execute/executemany methods. (APSW issue 474)
- Added documentation and helper class for implementing custom
pragmas in your own Virtual File System (VFS) (APSW issue 464)
- Reduced overhead of the Column method when using
apsw.ext.make_virtual_module() (APSW issue 465)
-------------------------------------------------------------------
Wed Jul 26 14:57:47 UTC 2023 - Matej Cepl <mcepl@suse.com>
@@ -169,7 +303,7 @@ Mon Jan 17 20:40:34 UTC 2022 - Dirk Müller <dmueller@suse.com>
- update to 3.37.0-r1:
* Allow breaking of reference cycles between objects that contain a
Connection or Cursor
Connection or Cursor
* Fixed custom VFS extension loading failure could leave the error message
unterminated
* Updated size of mutex array used by the fork checker
@@ -190,7 +324,7 @@ Fri Jun 25 06:20:00 UTC 2021 - ecsos <ecsos@opensuse.org>
it by default with enable-all-extensions.
- Use the newer buffer API for Python 3
(old API removed in Python 3.10).
- Fix loadable extensions are missing,
- Fix loadable extensions are missing,
so insert --enable-all-extensions and --enable=load_extension.
See: https://rogerbinns.github.io/apsw/build.html#building
@@ -200,7 +334,7 @@ Tue Dec 29 13:46:03 UTC 2020 - Dirk Müller <dmueller@suse.com>
- udpate to 3.34.0-r1:
* Windows MSI installer files are now provided
* Added Connection.txn_state()
* Added constants: SQLITE_IOERR_CORRUPTFS
* Added constants: SQLITE_IOERR_CORRUPTFS
-------------------------------------------------------------------
Tue Sep 22 11:54:56 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>

View File

@@ -1,7 +1,7 @@
#
# spec file for package python-apsw
#
# Copyright (c) 2023 SUSE LLC
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,20 +18,23 @@
%{?sle15_python_module_pythons}
Name: python-apsw
Version: 3.42.0.1
Version: 3.46.1.0
Release: 0
Summary: Another Python SQLite Wrapper
License: Zlib
Group: Development/Libraries/Python
URL: https://github.com/rogerbinns/apsw/
Source: https://github.com/rogerbinns/apsw/archive/refs/tags/%{version}.tar.gz#/apsw-%{version}.tar.gz
BuildRequires: %{python_module devel}
# PATCH-FIX-UPSTREAM disable-infinite-recursion-in-tests.patch -- gh#rogerbinns/apsw@0103ade60
Patch0: disable-infinite-recursion-in-tests.patch
BuildRequires: %{python_module devel >= 3.8}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: pkgconfig(sqlite3) >= 3.42
BuildRequires: pkgconfig(sqlite3) >= 3.44
%python_subpackages
%description