Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-jaraco.context for
openSUSE:Factory checked in at 2026-01-21 14:12:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jaraco.context (Old)
and /work/SRC/openSUSE:Factory/.python-jaraco.context.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jaraco.context"
Wed Jan 21 14:12:02 2026 rev:11 rq:1328242 version:6.1.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-jaraco.context/python-jaraco.context.changes
2025-09-30 17:35:36.108148087 +0200
+++
/work/SRC/openSUSE:Factory/.python-jaraco.context.new.1928/python-jaraco.context.changes
2026-01-21 14:12:13.934020544 +0100
@@ -1,0 +2,7 @@
+Tue Jan 20 09:52:54 UTC 2026 - Nico Krapp <[email protected]>
+
+- Update to 6.1.0 (fixes CVE-2026-23949, bsc#1256954)
+ * In tarfile.context, ensure that the default filter honors the data filter
+ to avoid path traversal vulnerabilities.
+
+-------------------------------------------------------------------
Old:
----
jaraco_context-6.0.1.tar.gz
New:
----
jaraco_context-6.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jaraco.context.spec ++++++
--- /var/tmp/diff_new_pack.e2MUl0/_old 2026-01-21 14:12:14.930062011 +0100
+++ /var/tmp/diff_new_pack.e2MUl0/_new 2026-01-21 14:12:14.934062178 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-jaraco.context
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-jaraco.context
-Version: 6.0.1
+Version: 6.1.0
Release: 0
Summary: Tools to work with functools
License: MIT
++++++ jaraco_context-6.0.1.tar.gz -> jaraco_context-6.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/.coveragerc
new/jaraco_context-6.1.0/.coveragerc
--- old/jaraco_context-6.0.1/.coveragerc 2024-08-20 05:39:01.000000000
+0200
+++ new/jaraco_context-6.1.0/.coveragerc 2026-01-13 03:53:29.000000000
+0100
@@ -8,6 +8,8 @@
[report]
show_missing = True
exclude_also =
- # jaraco/skeleton#97
- @overload
+ # Exclude common false positives per
+ #
https://coverage.readthedocs.io/en/latest/excluding.html#advanced-exclusion
+ # Ref jaraco/skeleton#97 and jaraco/skeleton#135
+ class .*\bProtocol\):
if TYPE_CHECKING:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/.github/dependabot.yml
new/jaraco_context-6.1.0/.github/dependabot.yml
--- old/jaraco_context-6.0.1/.github/dependabot.yml 2024-08-20
05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/.github/dependabot.yml 1970-01-01
01:00:00.000000000 +0100
@@ -1,8 +0,0 @@
-version: 2
-updates:
- - package-ecosystem: "pip"
- directory: "/"
- schedule:
- interval: "daily"
- allow:
- - dependency-type: "all"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/.github/workflows/main.yml
new/jaraco_context-6.1.0/.github/workflows/main.yml
--- old/jaraco_context-6.0.1/.github/workflows/main.yml 2024-08-20
05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/.github/workflows/main.yml 2026-01-13
03:53:29.000000000 +0100
@@ -10,6 +10,7 @@
# required if branches-ignore is supplied (jaraco/skeleton#103)
- '**'
pull_request:
+ workflow_dispatch:
permissions:
contents: read
@@ -20,7 +21,6 @@
# Suppress noisy pip warnings
PIP_DISABLE_PIP_VERSION_CHECK: 'true'
- PIP_NO_PYTHON_VERSION_WARNING: 'true'
PIP_NO_WARN_SCRIPT_LOCATION: 'true'
# Ensure tests can sense settings about the environment
@@ -34,27 +34,36 @@
# https://blog.jaraco.com/efficient-use-of-ci-resources/
matrix:
python:
- - "3.8"
- - "3.12"
+ - "3.9"
+ - "3.13"
platform:
- ubuntu-latest
- macos-latest
- windows-latest
include:
- - python: "3.9"
- platform: ubuntu-latest
- python: "3.10"
platform: ubuntu-latest
- python: "3.11"
platform: ubuntu-latest
+ - python: "3.12"
+ platform: ubuntu-latest
+ - python: "3.14"
+ platform: ubuntu-latest
- python: pypy3.10
platform: ubuntu-latest
runs-on: ${{ matrix.platform }}
- continue-on-error: ${{ matrix.python == '3.13' }}
+ continue-on-error: ${{ matrix.python == '3.14' }}
steps:
- uses: actions/checkout@v4
+ - name: Install build dependencies
+ # Install dependencies for building packages on pre-release Pythons
+ # jaraco/skeleton#161
+ if: matrix.python == '3.14' && matrix.platform == 'ubuntu-latest'
+ run: |
+ sudo apt update
+ sudo apt install -y libxml2-dev libxslt-dev
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
allow-prereleases: true
@@ -76,7 +85,7 @@
with:
fetch-depth: 0
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Install tox
@@ -110,7 +119,7 @@
steps:
- uses: actions/checkout@v4
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Install tox
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/.pre-commit-config.yaml
new/jaraco_context-6.1.0/.pre-commit-config.yaml
--- old/jaraco_context-6.0.1/.pre-commit-config.yaml 2024-08-20
05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/.pre-commit-config.yaml 2026-01-13
03:53:29.000000000 +0100
@@ -1,6 +1,7 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.1.8
+ rev: v0.12.0
hooks:
- id: ruff
+ args: [--fix, --unsafe-fixes]
- id: ruff-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/.readthedocs.yaml
new/jaraco_context-6.1.0/.readthedocs.yaml
--- old/jaraco_context-6.0.1/.readthedocs.yaml 2024-08-20 05:39:01.000000000
+0200
+++ new/jaraco_context-6.1.0/.readthedocs.yaml 2026-01-13 03:53:29.000000000
+0100
@@ -5,6 +5,9 @@
extra_requirements:
- doc
+sphinx:
+ configuration: docs/conf.py
+
# required boilerplate readthedocs/readthedocs.org#10401
build:
os: ubuntu-lts-latest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/LICENSE
new/jaraco_context-6.1.0/LICENSE
--- old/jaraco_context-6.0.1/LICENSE 2024-08-20 05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/LICENSE 2026-01-13 03:53:49.000000000 +0100
@@ -1,17 +1,18 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+MIT License
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+Copyright (c) 2026 <copyright holders>
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
+Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and
+associated documentation files (the "Software"), to deal in the Software
without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included in all
copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
AND NONINFRINGEMENT. IN NO
+EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/NEWS.rst
new/jaraco_context-6.1.0/NEWS.rst
--- old/jaraco_context-6.0.1/NEWS.rst 2024-08-20 05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/NEWS.rst 2026-01-13 03:53:29.000000000 +0100
@@ -1,3 +1,18 @@
+v6.1.0
+======
+
+Features
+--------
+
+- In tarfile.context, ensure that the default filter honors the data filter to
avoid path traversal vulnerabilities.
+
+
+v6.0.2
+======
+
+No significant changes.
+
+
v6.0.1
======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/PKG-INFO
new/jaraco_context-6.1.0/PKG-INFO
--- old/jaraco_context-6.0.1/PKG-INFO 2024-08-20 05:39:22.732852700 +0200
+++ new/jaraco_context-6.1.0/PKG-INFO 2026-01-13 03:53:49.933753500 +0100
@@ -1,25 +1,21 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: jaraco.context
-Version: 6.0.1
+Version: 6.1.0
Summary: Useful decorators and context managers
Author-email: "Jason R. Coombs" <[email protected]>
+License-Expression: MIT
Project-URL: Source, https://github.com/jaraco/jaraco.context
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Requires-Python: >=3.8
+Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: backports.tarfile; python_version < "3.12"
Provides-Extra: test
Requires-Dist: pytest!=8.1.*,>=6; extra == "test"
-Requires-Dist: pytest-checkdocs>=2.4; extra == "test"
-Requires-Dist: pytest-cov; extra == "test"
-Requires-Dist: pytest-mypy; extra == "test"
-Requires-Dist: pytest-enabler>=2.2; extra == "test"
-Requires-Dist: pytest-ruff>=0.2.1; sys_platform != "cygwin" and extra == "test"
+Requires-Dist: jaraco.test>=5.6.0; extra == "test"
Requires-Dist: portend; extra == "test"
Provides-Extra: doc
Requires-Dist: sphinx>=3.5; extra == "doc"
@@ -28,6 +24,17 @@
Requires-Dist: furo; extra == "doc"
Requires-Dist: sphinx-lint; extra == "doc"
Requires-Dist: jaraco.tidelift>=1.4; extra == "doc"
+Provides-Extra: check
+Requires-Dist: pytest-checkdocs>=2.4; extra == "check"
+Requires-Dist: pytest-ruff>=0.2.1; sys_platform != "cygwin" and extra ==
"check"
+Provides-Extra: cover
+Requires-Dist: pytest-cov; extra == "cover"
+Provides-Extra: enabler
+Requires-Dist: pytest-enabler>=3.4; extra == "enabler"
+Provides-Extra: type
+Requires-Dist: pytest-mypy>=1.0.1; extra == "type"
+Requires-Dist: mypy<1.19; platform_python_implementation == "PyPy" and extra
== "type"
+Dynamic: license-file
.. image:: https://img.shields.io/pypi/v/jaraco.context.svg
:target: https://pypi.org/project/jaraco.context
@@ -38,14 +45,14 @@
:target:
https://github.com/jaraco/jaraco.context/actions?query=workflow%3A%22tests%22
:alt: tests
-.. image::
https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json
+.. image::
https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
.. image:: https://readthedocs.org/projects/jaracocontext/badge/?version=latest
:target: https://jaracocontext.readthedocs.io/en/latest/?badge=latest
-.. image:: https://img.shields.io/badge/skeleton-2024-informational
+.. image:: https://img.shields.io/badge/skeleton-2025-informational
:target: https://blog.jaraco.com/skeleton
.. image:: https://tidelift.com/badges/package/pypi/jaraco.context
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/README.rst
new/jaraco_context-6.1.0/README.rst
--- old/jaraco_context-6.0.1/README.rst 2024-08-20 05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/README.rst 2026-01-13 03:53:29.000000000 +0100
@@ -7,14 +7,14 @@
:target:
https://github.com/jaraco/jaraco.context/actions?query=workflow%3A%22tests%22
:alt: tests
-.. image::
https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json
+.. image::
https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
.. image:: https://readthedocs.org/projects/jaracocontext/badge/?version=latest
:target: https://jaracocontext.readthedocs.io/en/latest/?badge=latest
-.. image:: https://img.shields.io/badge/skeleton-2024-informational
+.. image:: https://img.shields.io/badge/skeleton-2025-informational
:target: https://blog.jaraco.com/skeleton
.. image:: https://tidelift.com/badges/package/pypi/jaraco.context
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/conftest.py
new/jaraco_context-6.1.0/conftest.py
--- old/jaraco_context-6.0.1/conftest.py 2024-08-20 05:39:01.000000000
+0200
+++ new/jaraco_context-6.1.0/conftest.py 2026-01-13 03:53:29.000000000
+0100
@@ -1,6 +1,6 @@
+import functools
import http.server
import io
-import functools
import tarfile
import threading
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/docs/conf.py
new/jaraco_context-6.1.0/docs/conf.py
--- old/jaraco_context-6.0.1/docs/conf.py 2024-08-20 05:39:01.000000000
+0200
+++ new/jaraco_context-6.1.0/docs/conf.py 2026-01-13 03:53:29.000000000
+0100
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
extensions = [
'sphinx.ext.autodoc',
'jaraco.packaging.sphinx',
@@ -30,6 +32,7 @@
# Be strict about any broken references
nitpicky = True
+nitpick_ignore: list[tuple[str, str]] = []
nitpick_ignore = [
('py:class', 'contextlib.suppress'),
@@ -47,4 +50,15 @@
# Preserve authored syntax for defaults
autodoc_preserve_defaults = True
+# Add support for linking usernames, PyPI projects, Wikipedia pages
+github_url = 'https://github.com/'
+extlinks = {
+ 'user': (f'{github_url}%s', '@%s'),
+ 'pypi': ('https://pypi.org/project/%s', '%s'),
+ 'wiki': ('https://wikipedia.org/wiki/%s', '%s'),
+}
+extensions += ['sphinx.ext.extlinks']
+
+# local
+
extensions += ['jaraco.tidelift']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/jaraco/context/__init__.py
new/jaraco_context-6.1.0/jaraco/context/__init__.py
--- old/jaraco_context-6.0.1/jaraco/context/__init__.py 2024-08-20
05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/jaraco/context/__init__.py 2026-01-13
03:53:29.000000000 +0100
@@ -12,8 +12,7 @@
import sys
import tempfile
import urllib.request
-from typing import Iterator
-
+from collections.abc import Iterator
if sys.version_info < (3, 12):
from backports import tarfile
@@ -78,12 +77,19 @@
try:
req = urllib.request.urlopen(url)
with tarfile.open(fileobj=req, mode='r|*') as tf:
- tf.extractall(path=target_dir, filter=strip_first_component)
+ tf.extractall(path=target_dir, filter=_default_filter)
yield target_dir
finally:
shutil.rmtree(target_dir)
+def _compose_tarfile_filters(*filters):
+ def compose_two(f1, f2):
+ return lambda member, path: f1(f2(member, path), path)
+
+ return functools.reduce(compose_two, filters, lambda member, path: member)
+
+
def strip_first_component(
member: tarfile.TarInfo,
path,
@@ -92,6 +98,9 @@
return member
+_default_filter = _compose_tarfile_filters(tarfile.data_filter,
strip_first_component)
+
+
def _compose(*cmgrs):
"""
Compose any number of dependent context managers into a single one.
@@ -181,6 +190,8 @@
If dest_ctx is supplied, it should be a context manager
to yield the target directory for the check out.
+ >>> getfixture('ensure_git')
+ >>> getfixture('needs_internet')
>>> repo = repo_context('https://github.com/jaraco/jaraco.context')
>>> with repo as dest:
... listing = os.listdir(dest)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jaraco_context-6.0.1/jaraco.context.egg-info/PKG-INFO
new/jaraco_context-6.1.0/jaraco.context.egg-info/PKG-INFO
--- old/jaraco_context-6.0.1/jaraco.context.egg-info/PKG-INFO 2024-08-20
05:39:22.000000000 +0200
+++ new/jaraco_context-6.1.0/jaraco.context.egg-info/PKG-INFO 2026-01-13
03:53:49.000000000 +0100
@@ -1,25 +1,21 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: jaraco.context
-Version: 6.0.1
+Version: 6.1.0
Summary: Useful decorators and context managers
Author-email: "Jason R. Coombs" <[email protected]>
+License-Expression: MIT
Project-URL: Source, https://github.com/jaraco/jaraco.context
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Requires-Python: >=3.8
+Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: backports.tarfile; python_version < "3.12"
Provides-Extra: test
Requires-Dist: pytest!=8.1.*,>=6; extra == "test"
-Requires-Dist: pytest-checkdocs>=2.4; extra == "test"
-Requires-Dist: pytest-cov; extra == "test"
-Requires-Dist: pytest-mypy; extra == "test"
-Requires-Dist: pytest-enabler>=2.2; extra == "test"
-Requires-Dist: pytest-ruff>=0.2.1; sys_platform != "cygwin" and extra == "test"
+Requires-Dist: jaraco.test>=5.6.0; extra == "test"
Requires-Dist: portend; extra == "test"
Provides-Extra: doc
Requires-Dist: sphinx>=3.5; extra == "doc"
@@ -28,6 +24,17 @@
Requires-Dist: furo; extra == "doc"
Requires-Dist: sphinx-lint; extra == "doc"
Requires-Dist: jaraco.tidelift>=1.4; extra == "doc"
+Provides-Extra: check
+Requires-Dist: pytest-checkdocs>=2.4; extra == "check"
+Requires-Dist: pytest-ruff>=0.2.1; sys_platform != "cygwin" and extra ==
"check"
+Provides-Extra: cover
+Requires-Dist: pytest-cov; extra == "cover"
+Provides-Extra: enabler
+Requires-Dist: pytest-enabler>=3.4; extra == "enabler"
+Provides-Extra: type
+Requires-Dist: pytest-mypy>=1.0.1; extra == "type"
+Requires-Dist: mypy<1.19; platform_python_implementation == "PyPy" and extra
== "type"
+Dynamic: license-file
.. image:: https://img.shields.io/pypi/v/jaraco.context.svg
:target: https://pypi.org/project/jaraco.context
@@ -38,14 +45,14 @@
:target:
https://github.com/jaraco/jaraco.context/actions?query=workflow%3A%22tests%22
:alt: tests
-.. image::
https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json
+.. image::
https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
.. image:: https://readthedocs.org/projects/jaracocontext/badge/?version=latest
:target: https://jaracocontext.readthedocs.io/en/latest/?badge=latest
-.. image:: https://img.shields.io/badge/skeleton-2024-informational
+.. image:: https://img.shields.io/badge/skeleton-2025-informational
:target: https://blog.jaraco.com/skeleton
.. image:: https://tidelift.com/badges/package/pypi/jaraco.context
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jaraco_context-6.0.1/jaraco.context.egg-info/SOURCES.txt
new/jaraco_context-6.1.0/jaraco.context.egg-info/SOURCES.txt
--- old/jaraco_context-6.0.1/jaraco.context.egg-info/SOURCES.txt
2024-08-20 05:39:22.000000000 +0200
+++ new/jaraco_context-6.1.0/jaraco.context.egg-info/SOURCES.txt
2026-01-13 03:53:49.000000000 +0100
@@ -14,7 +14,6 @@
towncrier.toml
tox.ini
.github/FUNDING.yml
-.github/dependabot.yml
.github/workflows/main.yml
docs/conf.py
docs/history.rst
@@ -25,4 +24,5 @@
jaraco.context.egg-info/requires.txt
jaraco.context.egg-info/top_level.txt
jaraco/context/__init__.py
-jaraco/context/py.typed
\ No newline at end of file
+jaraco/context/py.typed
+tests/test_safety.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jaraco_context-6.0.1/jaraco.context.egg-info/requires.txt
new/jaraco_context-6.1.0/jaraco.context.egg-info/requires.txt
--- old/jaraco_context-6.0.1/jaraco.context.egg-info/requires.txt
2024-08-20 05:39:22.000000000 +0200
+++ new/jaraco_context-6.1.0/jaraco.context.egg-info/requires.txt
2026-01-13 03:53:49.000000000 +0100
@@ -2,6 +2,15 @@
[:python_version < "3.12"]
backports.tarfile
+[check]
+pytest-checkdocs>=2.4
+
+[check:sys_platform != "cygwin"]
+pytest-ruff>=0.2.1
+
+[cover]
+pytest-cov
+
[doc]
sphinx>=3.5
jaraco.packaging>=9.3
@@ -10,13 +19,16 @@
sphinx-lint
jaraco.tidelift>=1.4
+[enabler]
+pytest-enabler>=3.4
+
[test]
pytest!=8.1.*,>=6
-pytest-checkdocs>=2.4
-pytest-cov
-pytest-mypy
-pytest-enabler>=2.2
+jaraco.test>=5.6.0
portend
-[test:sys_platform != "cygwin"]
-pytest-ruff>=0.2.1
+[type]
+pytest-mypy>=1.0.1
+
+[type:platform_python_implementation == "PyPy"]
+mypy<1.19
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/mypy.ini
new/jaraco_context-6.1.0/mypy.ini
--- old/jaraco_context-6.0.1/mypy.ini 2024-08-20 05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/mypy.ini 2026-01-13 03:53:29.000000000 +0100
@@ -1,5 +1,19 @@
[mypy]
-ignore_missing_imports = True
-# required to support namespace packages
-# https://github.com/python/mypy/issues/14057
+# Is the project well-typed?
+strict = False
+
+# Early opt-in even when strict = False
+warn_unused_ignores = True
+warn_redundant_casts = True
+enable_error_code = ignore-without-code
+
+# Support namespace packages per https://github.com/python/mypy/issues/14057
explicit_package_bases = True
+
+disable_error_code =
+ # Disable due to many false positives
+ overload-overlap,
+
+# jaraco/portend#17
+[mypy-portend.*]
+ignore_missing_imports = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/pyproject.toml
new/jaraco_context-6.1.0/pyproject.toml
--- old/jaraco_context-6.0.1/pyproject.toml 2024-08-20 05:39:01.000000000
+0200
+++ new/jaraco_context-6.1.0/pyproject.toml 2026-01-13 03:53:29.000000000
+0100
@@ -1,5 +1,10 @@
[build-system]
-requires = ["setuptools>=61.2", "setuptools_scm[toml]>=3.4.1"]
+requires = [
+ "setuptools>=77",
+ "setuptools_scm[toml]>=3.4.1",
+ # jaraco/skeleton#174
+ "coherent.licensed",
+]
build-backend = "setuptools.build_meta"
[project]
@@ -12,11 +17,11 @@
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
- "License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
]
-requires-python = ">=3.8"
+requires-python = ">=3.9"
+license = "MIT"
dependencies = [
'backports.tarfile; python_version < "3.12"',
]
@@ -29,15 +34,12 @@
test = [
# upstream
"pytest >= 6, != 8.1.*",
- "pytest-checkdocs >= 2.4",
- "pytest-cov",
- "pytest-mypy",
- "pytest-enabler >= 2.2",
- "pytest-ruff >= 0.2.1; sys_platform != 'cygwin'",
# local
+ "jaraco.test >= 5.6.0",
"portend",
]
+
doc = [
# upstream
"sphinx >= 3.5",
@@ -52,4 +54,32 @@
# local
]
+check = [
+ "pytest-checkdocs >= 2.4",
+ "pytest-ruff >= 0.2.1; sys_platform != 'cygwin'",
+]
+
+cover = [
+ "pytest-cov",
+]
+
+enabler = [
+ "pytest-enabler >= 3.4",
+]
+
+type = [
+ # upstream
+ "pytest-mypy >= 1.0.1",
+
+ ## workaround for python/mypy#20454
+ "mypy < 1.19; python_implementation == 'PyPy'",
+
+ # local
+]
+
+
[tool.setuptools_scm]
+
+
+[tool.pytest-enabler.mypy]
+# Disabled due to jaraco/skeleton#143
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/ruff.toml
new/jaraco_context-6.1.0/ruff.toml
--- old/jaraco_context-6.0.1/ruff.toml 2024-08-20 05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/ruff.toml 2026-01-13 03:53:29.000000000 +0100
@@ -1,10 +1,31 @@
[lint]
extend-select = [
- "C901",
- "PERF401",
- "W",
+ # upstream
+
+ "C901", # complex-structure
+ "I", # isort
+ "PERF401", # manual-list-comprehension
+
+ # Ensure modern type annotation syntax and best practices
+ # Not including those covered by type-checkers or exclusive to Python
3.11+
+ "FA", # flake8-future-annotations
+ "F404", # late-future-import
+ "PYI", # flake8-pyi
+ "UP006", # non-pep585-annotation
+ "UP007", # non-pep604-annotation
+ "UP010", # unnecessary-future-import
+ "UP035", # deprecated-import
+ "UP037", # quoted-annotation
+ "UP043", # unnecessary-default-type-args
+
+ # local
]
ignore = [
+ # upstream
+
+ # Typeshed rejects complex or non-literal defaults for maintenance and
testing reasons,
+ # irrelevant to this project.
+ "PYI011", # typed-argument-default-in-stub
# https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
"W191",
"E111",
@@ -18,8 +39,8 @@
"Q003",
"COM812",
"COM819",
- "ISC001",
- "ISC002",
+
+ # local
]
[format]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/tests/test_safety.py
new/jaraco_context-6.1.0/tests/test_safety.py
--- old/jaraco_context-6.0.1/tests/test_safety.py 1970-01-01
01:00:00.000000000 +0100
+++ new/jaraco_context-6.1.0/tests/test_safety.py 2026-01-13
03:53:29.000000000 +0100
@@ -0,0 +1,72 @@
+import io
+import sys
+import types
+from contextlib import nullcontext as does_not_raise
+
+import pytest
+
+import jaraco.context
+from jaraco.context import tarfile
+
+
+def make_tarball_with(member):
+ tar_data = io.BytesIO()
+ with tarfile.open(fileobj=tar_data, mode='w') as tar:
+ tarinfo = tarfile.TarInfo(name=member.path)
+ content = f'content for {member.path}'
+ bin_content = content.encode('ascii')
+ tarinfo.size = len(bin_content)
+ tar.addfile(tarinfo, io.BytesIO(bin_content))
+
+ tar_data.seek(0)
+ return tar_data
+
+
+cases = [
+ types.SimpleNamespace(
+ path='dummy_dir/legitimate_file.txt',
+ expect=does_not_raise(),
+ ),
+ pytest.param(
+ types.SimpleNamespace(
+ path='dummy_dir/subdir/../legitimate_file.txt',
+ expect=does_not_raise(),
+ ),
+ marks=pytest.mark.skipif(
+ (3, 11) < sys.version_info < (3, 13),
+ reason='Fails with FileExistsError on Python 3.12',
+ ),
+ ),
+ types.SimpleNamespace(
+ path='dummy_dir/../../tmp/pwned_by_zipslip.txt',
+ expect=pytest.raises(tarfile.OutsideDestinationError),
+ ),
+ types.SimpleNamespace(
+ path='dummy_dir/../../../../home/pwned_home.txt',
+ expect=pytest.raises(tarfile.OutsideDestinationError),
+ ),
+ types.SimpleNamespace(
+ path='dummy_dir/../escaped.txt',
+ expect=pytest.raises(tarfile.OutsideDestinationError),
+ ),
+]
+
+
[email protected](params=cases)
+def tarfile_case(request):
+ with tarfile.open(fileobj=make_tarball_with(request.param), mode='r') as
tf:
+ yield types.SimpleNamespace(
+ tarfile=tf,
+ expect=request.param.expect,
+ )
+
+
+def test_zipslip_exploit(tmp_path, tarfile_case):
+ """
+ Ensure that protections from the default tarfile filter are applied.
+ """
+ (member,) = tarfile_case.tarfile
+ with tarfile_case.expect:
+ tarfile_case.tarfile.extract(
+ member, path=tmp_path, filter=jaraco.context._default_filter
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/towncrier.toml
new/jaraco_context-6.1.0/towncrier.toml
--- old/jaraco_context-6.0.1/towncrier.toml 2024-08-20 05:39:01.000000000
+0200
+++ new/jaraco_context-6.1.0/towncrier.toml 2026-01-13 03:53:29.000000000
+0100
@@ -1,2 +1,3 @@
[tool.towncrier]
title_format = "{version}"
+directory = "newsfragments" # jaraco/skeleton#184
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.0.1/tox.ini
new/jaraco_context-6.1.0/tox.ini
--- old/jaraco_context-6.0.1/tox.ini 2024-08-20 05:39:01.000000000 +0200
+++ new/jaraco_context-6.1.0/tox.ini 2026-01-13 03:53:29.000000000 +0100
@@ -8,6 +8,10 @@
usedevelop = True
extras =
test
+ check
+ cover
+ enabler
+ type
[testenv:diffcov]
description = run tests and check that diff from main is covered
@@ -27,9 +31,7 @@
changedir = docs
commands =
python -m sphinx -W --keep-going . {toxinidir}/build/html
- python -m sphinxlint \
- # workaround for sphinx-contrib/sphinx-lint#83
- --jobs 1
+ python -m sphinxlint
[testenv:finalize]
description = assemble changelog and tag a release