Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-ijson for openSUSE:Factory checked in at 2026-10-26 10:00:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ijson (Old) and /work/SRC/openSUSE:Factory/.python-ijson.new.2252680 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ijson" Mon Oct 26 10:00:43 2026 rev:11 rq:1392437 version:3.6.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ijson/python-ijson.changes 2026-07-21 22:58:14.945313114 +0200 +++ /work/SRC/openSUSE:Factory/.python-ijson.new.2252680/python-ijson.changes 2026-10-26 10:01:55.206539663 +0100 @@ -1,0 +2,8 @@ +Sun Oct 25 14:26:42 UTC 2026 - Dirk Müller <[email protected]> + +- update to 3.6.0: + * Removed support for Python < 3.10 + * Fixed treatment of null characters on strings (map keys and + string values) on `cffi` backend (#178). + +------------------------------------------------------------------- Old: ---- ijson-3.5.1.tar.gz New: ---- ijson-3.6.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ijson.spec ++++++ --- /var/tmp/diff_new_pack.JQzUX9/_old 2026-10-26 10:01:55.918569536 +0100 +++ /var/tmp/diff_new_pack.JQzUX9/_new 2026-10-26 10:01:55.920569620 +0100 @@ -20,14 +20,14 @@ %{?sle15_python_module_pythons} Name: python-ijson -Version: 3.5.1 +Version: 3.6.0 Release: 0 Summary: Iterative JSON parser with a standard Python iterator interface License: BSD-3-Clause Group: Development/Languages/Python URL: https://github.com/ICRAR/ijson Source: https://files.pythonhosted.org/packages/source/i/ijson/ijson-%{version}.tar.gz -BuildRequires: %{python_module devel} +BuildRequires: %{python_module devel >= 3.10} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} ++++++ ijson-3.5.1.tar.gz -> ijson-3.6.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/CHANGELOG.md new/ijson-3.6.0/CHANGELOG.md --- old/ijson-3.5.1/CHANGELOG.md 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/CHANGELOG.md 2026-10-12 22:24:15.300327800 +0200 @@ -2,6 +2,11 @@ ## Development +## [3.6.0] + +* Removed support for Python < 3.10 +* Fixed treatment of null characters on strings (map keys and string values) on `cffi` backend (#178). + ## [3.5.1] * The internal `ijson.common.ObjectBuilder` no longer creates internal reference @@ -410,3 +415,4 @@ [3.4.0.post0]: https://github.com/ICRAR/ijson/releases/tag/v3.4.0.post0 [3.5.0]: https://github.com/ICRAR/ijson/releases/tag/v3.5.0 [3.5.1]: https://github.com/ICRAR/ijson/releases/tag/v3.5.1 +[3.6.0]: https://github.com/ICRAR/ijson/releases/tag/v3.6.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/PKG-INFO new/ijson-3.6.0/PKG-INFO --- old/ijson-3.5.1/PKG-INFO 2026-07-06 19:24:17.241391400 +0200 +++ new/ijson-3.6.0/PKG-INFO 2026-10-12 22:24:19.169019700 +0200 @@ -1,21 +1,21 @@ Metadata-Version: 2.4 Name: ijson -Version: 3.5.1 +Version: 3.6.0 Summary: Iterative JSON parser with standard Python iterator interfaces Author-email: Rodrigo Tobar <[email protected]>, Ivan Sagalaev <[email protected]> License-Expression: BSD-3-Clause AND ISC Project-URL: Homepage, https://github.com/ICRAR/ijson Classifier: Development Status :: 5 - Production/Stable -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: 3.15 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Python: >=3.9 +Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE.txt Dynamic: license-file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/pyproject.toml new/ijson-3.6.0/pyproject.toml --- old/ijson-3.5.1/pyproject.toml 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/pyproject.toml 2026-10-12 22:24:15.301051000 +0200 @@ -13,17 +13,17 @@ ] classifiers = [ 'Development Status :: 5 - Production/Stable', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', 'Programming Language :: Python :: 3.14', + 'Programming Language :: Python :: 3.15', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Software Development :: Libraries :: Python Modules', ] -requires-python = ">=3.9" +requires-python = ">=3.10" dynamic = ["version"] [project.urls] @@ -38,7 +38,6 @@ [tool.tox] requires = ["tox>=4.23"] env_list = [ - "py39", "py310", "py311", "py312", @@ -46,6 +45,8 @@ "py313t", "py314", "py314t", + "py315", + "py315t", ] [tool.tox.env_run_base] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/src/ijson/backends/yajl2_cffi.py new/ijson-3.6.0/src/ijson/backends/yajl2_cffi.py --- old/ijson-3.5.1/src/ijson/backends/yajl2_cffi.py 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/src/ijson/backends/yajl2_cffi.py 2026-10-12 22:24:15.303051000 +0200 @@ -117,7 +117,8 @@ @ffi.callback('int(void *ctx, const unsigned char *stringVal, size_t stringLen)') @append_event_to_ctx('string') def string(val, length): - return ffi.string(val, maxlen=length).decode('utf-8') + # yajl gives an explicit length; ffi.string would stop at an embedded NUL + return ffi.buffer(val, length)[:].decode('utf-8') @ffi.callback('int(void *ctx)') @@ -129,7 +130,7 @@ @ffi.callback('int(void *ctx, const unsigned char *key, size_t stringLen)') @append_event_to_ctx('map_key') def map_key(key, length): - return ffi.string(key, maxlen=length).decode('utf-8') + return ffi.buffer(key, length)[:].decode('utf-8') @ffi.callback('int(void *ctx)') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/src/ijson/version.py new/ijson-3.6.0/src/ijson/version.py --- old/ijson-3.5.1/src/ijson/version.py 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/src/ijson/version.py 2026-10-12 22:24:15.303051000 +0200 @@ -1 +1 @@ -__version__ = '3.5.1' +__version__ = '3.6.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/src/ijson.egg-info/PKG-INFO new/ijson-3.6.0/src/ijson.egg-info/PKG-INFO --- old/ijson-3.5.1/src/ijson.egg-info/PKG-INFO 2026-07-06 19:24:17.000000000 +0200 +++ new/ijson-3.6.0/src/ijson.egg-info/PKG-INFO 2026-10-12 22:24:19.138062700 +0200 @@ -1,21 +1,21 @@ Metadata-Version: 2.4 Name: ijson -Version: 3.5.1 +Version: 3.6.0 Summary: Iterative JSON parser with standard Python iterator interfaces Author-email: Rodrigo Tobar <[email protected]>, Ivan Sagalaev <[email protected]> License-Expression: BSD-3-Clause AND ISC Project-URL: Homepage, https://github.com/ICRAR/ijson Classifier: Development Status :: 5 - Production/Stable -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: 3.15 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Python: >=3.9 +Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE.txt Dynamic: license-file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/tests/test_base.py new/ijson-3.6.0/tests/test_base.py --- old/ijson-3.5.1/tests/test_base.py 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/tests/test_base.py 2026-10-12 22:24:15.304331800 +0200 @@ -270,6 +270,7 @@ } ''' SURROGATE_PAIRS_JSON = br'"\uD83D\uDCA9"' +EMBEDDED_NUL_JSON = br'{"a\u0000b": "c\u0000d"}' PARTIAL_ARRAY_JSONS = [ (b'[1,', 1), (b'[1, 2 ', 1, 2), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/tests/test_basic_parse.py new/ijson-3.6.0/tests/test_basic_parse.py --- old/ijson-3.5.1/tests/test_basic_parse.py 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/tests/test_basic_parse.py 2026-10-12 22:24:15.304331800 +0200 @@ -7,7 +7,7 @@ import pytest from ijson import common -from .test_base import ARRAY_JSON, ARRAY_JSON_EVENTS, INCOMPLETE_JSONS, INCOMPLETE_JSON_TOKENS, INVALID_JSONS, JSON, JSON_EVENTS, SCALAR_JSON, SURROGATE_PAIRS_JSON, STRINGS_JSON +from .test_base import ARRAY_JSON, EMBEDDED_NUL_JSON, ARRAY_JSON_EVENTS, INCOMPLETE_JSONS, INCOMPLETE_JSON_TOKENS, INVALID_JSONS, JSON, JSON_EVENTS, SCALAR_JSON, SURROGATE_PAIRS_JSON, STRINGS_JSON def _raises_json_error(adaptor, json, **kwargs): @@ -57,6 +57,12 @@ assert '💩' == parsed_string +def test_embedded_nul(adaptor): + events = adaptor.basic_parse(EMBEDDED_NUL_JSON) + assert ('map_key', 'a\x00b') in events + assert ('string', 'c\x00d') in events + + def _get_numbers(adaptor, json, use_float): events = adaptor.basic_parse(json, use_float=use_float) return [value for event, value in events if event == 'number'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/tests/test_memleaks.py new/ijson-3.6.0/tests/test_memleaks.py --- old/ijson-3.5.1/tests/test_memleaks.py 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/tests/test_memleaks.py 2026-10-12 22:24:15.304331800 +0200 @@ -34,7 +34,7 @@ @pytest.mark.parametrize("exhaust", (True, False)) @pytest.mark.parametrize("n", (100000,)) @pytest.mark.parametrize("function", - ( + [ pytest.param(construction, id=name) for name, construction in { "basic_parse": lambda backend: backend.basic_parse_gen(io.BytesIO(b'[1, 2, 3, 4, 5]')), @@ -42,7 +42,7 @@ "items": lambda backend: backend.items_gen(io.BytesIO(b'[1, 2, 3, 4, 5]'), 'item'), "kvitems": lambda backend: backend.kvitems_gen(io.BytesIO(b'{"a": 0, "b": 1, "c": 2}'), ''), }.items() - ) + ] ) def test_generator(backend, function, n, exhaust): """Tests that running parse doesn't leak""" @@ -51,7 +51,7 @@ @pytest.mark.parametrize("n", (100000,)) @pytest.mark.parametrize("invalid_construction", - ( + [ pytest.param(construction, id=name) for name, construction in { "basic_parse": lambda backend: next(backend.basic_parse_gen(io.BytesIO(b'[1, 2, 3, 4, 5]'), not_a_kwarg=0)), @@ -59,7 +59,7 @@ "items": lambda backend: next(backend.items_gen(io.BytesIO(b'[1, 2, 3, 4, 5]'), 'item', not_a_kwarg=0)), "kvitems": lambda backend: next(backend.kvitems_gen(io.BytesIO(b'{"a": 0, "b": 1, "c": 2}'), '', not_a_kwarg=0)), }.items() - ) + ] ) def test_erroneous_generator_construction(backend, invalid_construction, n): """Tests that running parse doesn't leak""" @@ -71,7 +71,7 @@ @pytest.mark.parametrize("n", (100000,)) @pytest.mark.parametrize("invalid_construction", - ( + [ pytest.param(construction, id=name) for name, construction in { "basic_parse": lambda backend: backend.basic_parse_async(b'[1, 2, 3, 4, 5]', not_a_kwarg=0), @@ -79,7 +79,7 @@ "items": lambda backend: backend.items_async(b'[1, 2, 3, 4, 5]', 'item', not_a_kwarg=0), "kvitems": lambda backend: backend.kvitems_async(b'{"a": 0, "b": 1, "c": 2}', '', not_a_kwarg=0), }.items() - ) + ] ) def test_erroneous_async_construction(backend, n ,invalid_construction): def erroneous_async_construction(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ijson-3.5.1/tests/test_pulling.py new/ijson-3.6.0/tests/test_pulling.py --- old/ijson-3.5.1/tests/test_pulling.py 2026-07-06 19:24:12.000000000 +0200 +++ new/ijson-3.6.0/tests/test_pulling.py 2026-10-12 22:24:15.304331800 +0200 @@ -11,6 +11,6 @@ @pytest.mark.pull_only [email protected]("buf_size", (2 ** exp for exp in range(0, 13, 2))) [email protected]("buf_size", [2 ** exp for exp in range(0, 13, 2)]) def test_different_buf_sizes(adaptor, buf_size): assert JSON_EVENTS == adaptor.basic_parse(JSON, buf_size=buf_size)
