1 Commits

Author SHA256 Message Date
ead2134d4c Sync changes to SLFO-1.2 branch 2025-08-20 11:01:10 +02:00
5 changed files with 84 additions and 145 deletions

BIN
apsw-3.46.1.0.tar.gz LFS Normal file

Binary file not shown.

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a817c387ce2f4030ab7c3064cf21e9957911155f24f226c3ad4938df3a155e11
size 1093635

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,118 +1,8 @@
-------------------------------------------------------------------
Tue Aug 5 08:38:22 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
Tue Aug 19 11:54:17 UTC 2025 - Daniel Garcia <daniel.garcia@suse.com>
- Update to 3.50.4.0
* PyPI binary builds are available for:
* Python 3.14
* Windows ARM
* Python 3.14 `free threaded`__ (no GIL). The GIL will be
enabled when APSW is loaded. APSW will be free threaded
in the future (#568)
- from version 3.50.3.0
* preupdate_hook` is available. The `commit` and `rollback`
hooks let you provide multiple callbacks, multiplex by APSW.
`apsw.ext.Trace` can now show updates, and transaction begin,
commit, and rollback.
- from version 3.50.2.0
* PyPi builds now use `cibuildwheel version 3` which advances
the minimum supported Linux distribution. It is configured
to continue building both 32 and 64 bit binaries.
- from version 3.50.1.0
* No user visible changes.
- from version 3.50.0.0
* Full support for the `session`
* Added `Connection.setlk_timeout`, `apsw.mapping_setlk_timeout_flags`,
and enabled the timeout for amalgamation builds such as PyPI.
* Shell `open command <shell-cmd-open>` allows specifying flags to
open a connection, and `connection command <shell-cmd-connection>`
shows flags used for each open. (#557)
* Type stubs updated to `collections.abc.Buffer` (Python 3.12+)
wherever some bytes are taken. `Buffers `__ have always been used,
but Python 3.12 added typing.
- from version 3.49.2.0
* Shell dump command handles generated columns correctly. (#556)
- from version 3.49.1.0
* No APSW changes.
- from version 3.49.0.0
* `Connection.set_progress_handler` allows multiple callbacks
(multiplexed by APSW).
* Added `apsw.ext.query_limit` to limit total row count and execution
time within a block. (#520)
* `Connection.config` updated with new DBCONFIG options
* Adjustments for SQLite's new build process.
- from version 3.48.0.0
* You can `pass any Python objects <pyobject>` into SQLite, and
return them when used as runtime values such as functions. SQLite's
`pointer passing interface` is used behind the scenes. (#521)
* `Source releases <sources>` are also available in tar format (#548),
and have updated source release signing `instructions <verifydownload>`.
(#549)
* `Shared cache` (2006) is omitted when APSW includes the amalgamation
like PyPI builds. This is `recommended by SQLite `, has been `discouraged
for a long time`. `apsw.enable_shared_cache` will raise an exception
if called and the shared cache has been omitted. You can see what options
are in effect in `apsw.compile_options`. If you were using it for
shared memory databases then `use the memdb VFS <memdb>`.
- from version 3.47.2.0
* Added `apsw.ext.page_usage_to_svg` which shows database usage as
SVG. Available as shell `.pages-svg command <shell-cmd-pages-svg>`.
- from version 3.47.1.0
* Documentation on how to `build for packagers <packagers>` such as
those maintaining Linux and BSD distributions.
* Documentation on how to `build for pyodide>`, the Python WASM
implementation that runs in the browser and NPM. PyPI does not
accept pyodide packages yet.
* A command line tool ``apsw`` is defined which invokes the `shell
<shell>`. This also allows using `uvx apsw` without having to
explicitly install APSW.
* Added `apsw.ext.analyze_pages` which uses `dbstat` to provide useful
information about the pages making up the database, and fragmentation.
The shell `.pages command <shell-cmd-pages>` shows it in a pretty form.
- from version 3.47.0.0
* Support for Python 3.8 removed (#539).
* The readonly database statistics virtual table (`dbstat`) is enabled
by default for PyPI builds, and when ``--enable-all-extensions`` is
passed to manual `builds <build>`.
* Added `recursive triggers <apsw.bestpractice.connection_recursive_triggers>`
and `optimize <apsw.bestpractice.connection_optimize>` to `apsw.bestpractice`.
* Multiple callbacks can be present for `Connection.trace_v2` with APSW ensuring
they are all called (#502)
* `Connection.trace_v2` callback information now has ``trigger``, ``id``,
and ``total_changes`` fields.
* Added `Connection.data_version` for getting a change counter. `pragma
data_version` doesn't update when changes are made on the same connection,
only others.
* Added `apsw.ext.ShowResourceUsage` for getting resource and SQLite usage
in a context block, and also use it for the shell `timer <shell-cmd-timer>`
command.
* Added `apsw.ext.Trace` for tracing SQL execution, row and change
counting, and timing per statement for use in a context block.
* Added `FTS5 support <textsearch>` including registering and
calling tokenizers, and auxiliary functions. The `apsw.fts5`
module provides many additional classes and methods for working with
FTS5, including tokenizers for HTML, JSON, regular expressions,
support tokenizers for synonyms, stop words, transformers, and a
`~apsw.fts5.Table` class that wraps access to a FTS5 table
(including `creating one <apsw.fts5.Table.create>`) with
`~apsw.fts5.Table.search`, `~apsw.fts5.Table.more_like`,
and `~apsw.fts5.Table.query_suggest`. `apsw.fts5query` can
parse, modify, and reconstruct queries. The shell gets a `ftsq
<shell-cmd-ftsq>` command for issuing queries.
* Added `apsw.unicode` which implements Unicode algorithms for
determining codepoint groups making up a user perceived character,
word and sentence splitting, and where line breaks can be made. These
are used to make provided FTS5 tokenizers and auxiliary functions
fully Unicode aware. There are many additional methods such as
getting categories, stripping diacritics, case folding, width when
output to a terminal, text wrapping, and more.
* `apsw.ext.format_query_table` uses `apsw.unicode` to get widths and
line breaks more accurate. As a side effect it loses the `word_wrap`
parameter (breaking change).
- Add support for both update-alternatives and libalternatives
- Include apsw binary in %files section
- Remove shebang from all Python sources
- Switch upstream source back to PyPi
- Update BuildRequires from pyproject.toml
- 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>

View File

@@ -1,7 +1,7 @@
#
# spec file for package python-apsw
#
# Copyright (c) 2025 SUSE LLC and contributors
# 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
@@ -15,22 +15,19 @@
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%if 0%{?suse_version} > 1500
%bcond_without libalternatives
%else
%bcond_with libalternatives
%endif
%{?sle15_python_module_pythons}
Name: python-apsw
Version: 3.50.4.0
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://files.pythonhosted.org/packages/source/a/apsw/apsw-%{version}.tar.gz
BuildRequires: %{python_module devel >= 3.9}
Source: https://github.com/rogerbinns/apsw/archive/refs/tags/%{version}.tar.gz#/apsw-%{version}.tar.gz
# 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}
@@ -38,13 +35,6 @@ BuildRequires: fdupes
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: pkgconfig(sqlite3) >= 3.44
%if %{with libalternatives}
Requires: alts
BuildRequires: alts
%else
Requires(post): update-alternatives
Requires(postun):update-alternatives
%endif
%python_subpackages
%description
@@ -55,8 +45,6 @@ complete SQLite API into Python.
%prep
%autosetup -p1 -n apsw-%{version}
# Remove shebang from all Python sources
find . -name "*.py" -exec sed -i "/#\!\/usr\/bin\/env python3/d" {} \;
# See the discussion on gh#rogerbinns/apsw#462
cat << EOF >setup.apsw
@@ -72,7 +60,6 @@ export CFLAGS="%{optflags} -fno-strict-aliasing"
%install
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitearch}
%python_clone -a %{buildroot}%{_bindir}/apsw
%check
# gh#rogerbinns/apsw#462
@@ -81,19 +68,9 @@ export CFLAGS="%{optflags} -fno-strict-aliasing"
$python -m apsw.tests -v
}
%pre
%python_libalternatives_reset_alternative apsw
%post
%python_install_alternative apsw
%postun
%python_uninstall_alternative apsw
%files %{python_files}
%license LICENSE
%doc README.rst
%python_alternative %{_bindir}/apsw
%{python_sitearch}/apsw
%{python_sitearch}/apsw-%{version}*-info