From f803d7ca8e7917a2b76cc11c8a81f012afaa0172 Mon Sep 17 00:00:00 2001 From: Raven Date: Sat, 29 Jun 2024 12:12:15 +0600 Subject: [PATCH] reorganize --- .../fix-broken-since-obsoletes.patch | 169 ++ .../gi-docgen-2022.2-no-web-fonts.patch | 239 +++ base/gi-docgen/gi-docgen.spec | 346 ++++ .../hwdata/hwdata-create-pkgconfig.patch | 0 {extras/KF6/misc => base}/hwdata/hwdata.spec | 0 ...08176e44178eeffcb7a66f37d7cad074f51b.patch | 23 + ...e6b398198bca387df791b9232922c5721c80.patch | 42 + ...5e3118d687fa8c36747a7b349caebc82707d.patch | 21 + ...ddeb3dff4e51a9989067e912baf502410cee.patch | 141 ++ ...b26a902c5f89fee2dc20ac4dfaafcb8144ec.patch | 22 + ...f0f49f9024957189b5b465cd4d07078cd06f.patch | 36 + ...8deb1d80b4195ef16cddad256f33b46fbe29.patch | 22 + base/libheif/libheif-no-hevc-tests.patch | 17 + base/libheif/libheif.spec | 338 +++ base/python-markdown/python-markdown.spec | 65 + base/python-markupsafe/python-markupsafe.spec | 1 + base/python-pygdbmi/python-pygdbmi.spec | 71 + base/python-sentry-sdk/python-sentry-sdk.spec | 39 + .../python-smartypants.spec | 0 ...bject-from-gi.repository-in-Python-3.patch | 32 + ...ix-CVE-2020-10108-and-CVE-2020-10109.patch | 393 ++++ .../0003-Fix-CVE-2022-21716.patch | 86 + .../0004-Fix-CVE-2022-24801.patch | 437 ++++ base/python-twisted/python-twisted.spec | 428 ++++ .../python-typogrify/python-typogrify.spec | 0 .../misc => }/lightly-qt5/lightly-qt5.spec | 0 .../lightly-qt6/add-missing-files.patch | 0 .../misc => }/lightly-qt6/lightly-qt6.spec | 0 ...utomatic-zink-fallback-loading-betwe.patch | 40 + ...-18_-do-not-use-llvm-createLoopSinkP.patch | 41 + ...utomatic-zink-fallback-loading-betwe.patch | 103 + .../Mesa-MLAA-License-Clarification-Email.txt | 117 ++ .../mesa/gnome-shell-glthread-disable.patch | 11 + extras/mesa/mesa-meson-c99.patch | 42 + extras/mesa/mesa-use-python3.11.patch | 12 + extras/mesa/mesa.spec | 1836 +++++++++++++++++ extras/mesa/radeonsi-turn-off-glthread.patch | 11 + ...nk-fix-resizable-bar-detection-logic.patch | 39 + 38 files changed, 5220 insertions(+) create mode 100644 base/gi-docgen/fix-broken-since-obsoletes.patch create mode 100644 base/gi-docgen/gi-docgen-2022.2-no-web-fonts.patch create mode 100644 base/gi-docgen/gi-docgen.spec rename {extras/KF6/misc => base}/hwdata/hwdata-create-pkgconfig.patch (100%) rename {extras/KF6/misc => base}/hwdata/hwdata.spec (100%) create mode 100644 base/libheif/50aa08176e44178eeffcb7a66f37d7cad074f51b.patch create mode 100644 base/libheif/877de6b398198bca387df791b9232922c5721c80.patch create mode 100644 base/libheif/90955e3118d687fa8c36747a7b349caebc82707d.patch create mode 100644 base/libheif/9598ddeb3dff4e51a9989067e912baf502410cee.patch create mode 100644 base/libheif/a911b26a902c5f89fee2dc20ac4dfaafcb8144ec.patch create mode 100644 base/libheif/bef5f0f49f9024957189b5b465cd4d07078cd06f.patch create mode 100644 base/libheif/dfd88deb1d80b4195ef16cddad256f33b46fbe29.patch create mode 100644 base/libheif/libheif-no-hevc-tests.patch create mode 100644 base/libheif/libheif.spec create mode 100644 base/python-markdown/python-markdown.spec create mode 100644 base/python-pygdbmi/python-pygdbmi.spec create mode 100644 base/python-sentry-sdk/python-sentry-sdk.spec rename {extras/KF6/misc => base}/python-smartypants/python-smartypants.spec (100%) create mode 100644 base/python-twisted/0001-Import-gobject-from-gi.repository-in-Python-3.patch create mode 100644 base/python-twisted/0002-Fix-CVE-2020-10108-and-CVE-2020-10109.patch create mode 100644 base/python-twisted/0003-Fix-CVE-2022-21716.patch create mode 100644 base/python-twisted/0004-Fix-CVE-2022-24801.patch create mode 100644 base/python-twisted/python-twisted.spec rename {extras/KF6/misc => base}/python-typogrify/python-typogrify.spec (100%) rename extras/{KF6/misc => }/lightly-qt5/lightly-qt5.spec (100%) rename extras/{KF6/misc => }/lightly-qt6/add-missing-files.patch (100%) rename extras/{KF6/misc => }/lightly-qt6/lightly-qt6.spec (100%) create mode 100644 extras/mesa/0001-Revert-egl-add-automatic-zink-fallback-loading-betwe.patch create mode 100644 extras/mesa/0001-fix-ac-llvm-LLVM-18_-do-not-use-llvm-createLoopSinkP.patch create mode 100644 extras/mesa/0002-Revert-glx-add-automatic-zink-fallback-loading-betwe.patch create mode 100644 extras/mesa/Mesa-MLAA-License-Clarification-Email.txt create mode 100644 extras/mesa/gnome-shell-glthread-disable.patch create mode 100644 extras/mesa/mesa-meson-c99.patch create mode 100644 extras/mesa/mesa-use-python3.11.patch create mode 100644 extras/mesa/mesa.spec create mode 100644 extras/mesa/radeonsi-turn-off-glthread.patch create mode 100644 extras/mesa/zink-fix-resizable-bar-detection-logic.patch diff --git a/base/gi-docgen/fix-broken-since-obsoletes.patch b/base/gi-docgen/fix-broken-since-obsoletes.patch new file mode 100644 index 0000000..c41f052 --- /dev/null +++ b/base/gi-docgen/fix-broken-since-obsoletes.patch @@ -0,0 +1,169 @@ +From fc0d2b5f15f58dae817816ba02e20ebf7017b842 Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Mon, 18 Dec 2023 10:14:30 -0600 +Subject: [PATCH] Revert "generate: Add fallback for missing "since"" + +This reverts commit 4fa286d504df8dd970a175db806a7f9156cdf527. + +https://gitlab.gnome.org/GNOME/gi-docgen/-/issues/179 +--- + gidocgen/gdgenerate.py | 38 ++++++++++++++++---------------------- + 1 file changed, 16 insertions(+), 22 deletions(-) + +diff --git a/gidocgen/gdgenerate.py b/gidocgen/gdgenerate.py +index 75175a5..21095c6 100644 +--- a/gidocgen/gdgenerate.py ++++ b/gidocgen/gdgenerate.py +@@ -146,7 +146,7 @@ def gen_index_func(func, namespace, md=None): + if func.available_since is not None: + available_since = func.available_since + else: +- available_since = namespace.version ++ available_since = None + if func.deprecated: + (version, msg) = func.deprecated_since + deprecated_since = version +@@ -170,7 +170,7 @@ def gen_index_property(prop, namespace, md=None): + if prop.available_since is not None: + available_since = prop.available_since + else: +- available_since = namespace.version ++ available_since = None + if prop.deprecated: + (version, msg) = prop.deprecated_since + deprecated_since = version +@@ -193,7 +193,7 @@ def gen_index_signal(signal, namespace, md=None): + if signal.available_since is not None: + available_since = signal.available_since + else: +- available_since = namespace.version ++ available_since = None + if signal.deprecated: + (version, msg) = signal.deprecated_since + deprecated_since = version +@@ -394,7 +394,7 @@ class TemplateConstant: + + self.stability = const.stability + self.attributes = const.attributes +- self.available_since = const.available_since or namespace.version ++ self.available_since = const.available_since + if const.deprecated: + (version, msg) = const.deprecated_since + self.deprecated_since = { +@@ -455,7 +455,7 @@ class TemplateProperty: + self.description = MISSING_DESCRIPTION + + self.stability = prop.stability +- self.available_since = prop.available_since or namespace.version ++ self.available_since = prop.available_since + if prop.deprecated: + (version, msg) = prop.deprecated_since + self.deprecated_since = { +@@ -800,7 +800,7 @@ class TemplateSignal: + + self.stability = signal.stability + self.attributes = signal.attributes +- self.available_since = signal.available_since or namespace.version ++ self.available_since = signal.available_since + if signal.deprecated: + (version, msg) = signal.deprecated_since + self.deprecated_since = { +@@ -857,7 +857,7 @@ class TemplateMethod: + self.return_value = TemplateReturnValue(namespace, method, method.return_value) + + self.stability = method.stability +- self.available_since = method.available_since or type_.available_since ++ self.available_since = method.available_since + if method.deprecated: + (version, msg) = method.deprecated_since + self.deprecated_since = { +@@ -1006,7 +1006,7 @@ class TemplateClassMethod: + + self.stability = method.stability + self.attributes = method.attributes +- self.available_since = method.available_since or cls.available_since ++ self.available_since = method.available_since + if method.deprecated: + (version, msg) = method.deprecated_since + self.deprecated_since = { +@@ -1080,13 +1080,7 @@ class TemplateFunction: + + self.stability = func.stability + self.attributes = func.attributes +- if func.available_since is None: +- if type_ is None: +- self.available_since = namespace.version +- else: +- self.available_since = type_.available_since +- else: +- self.available_since = func.available_since ++ self.available_since = func.available_since + if func.deprecated: + (version, msg) = func.deprecated_since + self.deprecated_since = { +@@ -1171,7 +1165,7 @@ class TemplateCallback: + + self.stability = cb.stability + self.attributes = cb.attributes +- self.available_since = cb.available_since or namespace.version ++ self.available_since = cb.available_since + if cb.deprecated: + (version, msg) = cb.deprecated_since + self.deprecated_since = { +@@ -1315,7 +1309,7 @@ class TemplateInterface: + + self.stability = interface.stability + self.attributes = interface.attributes +- self.available_since = interface.available_since or namespace.version ++ self.available_since = interface.available_since + if interface.deprecated: + (version, msg) = interface.deprecated_since + self.deprecated_since = { +@@ -1471,7 +1465,7 @@ class TemplateClass: + + self.stability = cls.stability + self.attributes = cls.attributes +- self.available_since = cls.available_since or namespace.version ++ self.available_since = cls.available_since + if cls.deprecated: + (version, msg) = cls.deprecated_since + self.deprecated_since = { +@@ -1693,7 +1687,7 @@ class TemplateRecord: + + self.stability = record.stability + self.attributes = record.attributes +- self.available_since = record.available_since or namespace.version ++ self.available_since = record.available_since + if record.deprecated: + (version, msg) = record.deprecated_since + self.deprecated_since = { +@@ -1772,7 +1766,7 @@ class TemplateUnion: + + self.stability = union.stability + self.attributes = union.attributes +- self.available_since = union.available_since or namespace.version ++ self.available_since = union.available_since + if union.deprecated: + (version, msg) = union.deprecated_since + self.deprecated_since = { +@@ -1849,7 +1843,7 @@ class TemplateAlias: + + self.stability = alias.stability + self.attributes = alias.attributes +- self.available_since = alias.available_since or namespace.version ++ self.available_since = alias.available_since + if alias.deprecated: + (version, msg) = alias.deprecated_since + self.deprecated_since = { +@@ -1912,7 +1906,7 @@ class TemplateEnum: + + self.stability = enum.stability + self.attributes = enum.attributes +- self.available_since = enum.available_since or namespace.version ++ self.available_since = enum.available_since + if enum.deprecated: + (version, msg) = enum.deprecated_since + self.deprecated_since = { +-- +2.43.0 + diff --git a/base/gi-docgen/gi-docgen-2022.2-no-web-fonts.patch b/base/gi-docgen/gi-docgen-2022.2-no-web-fonts.patch new file mode 100644 index 0000000..996771f --- /dev/null +++ b/base/gi-docgen/gi-docgen-2022.2-no-web-fonts.patch @@ -0,0 +1,239 @@ +diff -Naur gi-docgen-2022.2-original/gidocgen/templates/basic/basic.toml gi-docgen-2022.2/gidocgen/templates/basic/basic.toml +--- gi-docgen-2022.2-original/gidocgen/templates/basic/basic.toml 2022-11-07 09:50:06.000000000 -0500 ++++ gi-docgen-2022.2/gidocgen/templates/basic/basic.toml 2022-11-11 08:23:51.069820380 -0500 +@@ -42,35 +42,4 @@ + "solarized-light.css", + "solarized-dark.css", + "search.js", +- "RedHatDisplay-Black.woff", +- "RedHatDisplay-Black.woff2", +- "RedHatDisplay-BlackItalic.woff", +- "RedHatDisplay-BlackItalic.woff2", +- "RedHatDisplay-Bold.woff", +- "RedHatDisplay-Bold.woff2", +- "RedHatDisplay-BoldItalic.woff", +- "RedHatDisplay-BoldItalic.woff2", +- "RedHatDisplay-Italic.woff", +- "RedHatDisplay-Italic.woff2", +- "RedHatDisplay-Medium.woff", +- "RedHatDisplay-Medium.woff2", +- "RedHatDisplay-MediumItalic.woff", +- "RedHatDisplay-MediumItalic.woff2", +- "RedHatDisplay-Regular.woff", +- "RedHatDisplay-Regular.woff2", +- "RedHatText-Bold.woff", +- "RedHatText-Bold.woff2", +- "RedHatText-BoldItalic.woff", +- "RedHatText-BoldItalic.woff2", +- "RedHatText-Italic.woff", +- "RedHatText-Italic.woff2", +- "RedHatText-Medium.woff", +- "RedHatText-Medium.woff2", +- "RedHatText-MediumItalic.woff", +- "RedHatText-MediumItalic.woff2", +- "RedHatText-Regular.woff", +- "RedHatText-Regular.woff2", +- "SourceCodePro-It.ttf.woff", +- "SourceCodePro-Regular.ttf.woff", +- "SourceCodePro-Semibold.ttf.woff", + ] +diff -Naur gi-docgen-2022.2-original/gidocgen/templates/basic/fonts.css gi-docgen-2022.2/gidocgen/templates/basic/fonts.css +--- gi-docgen-2022.2-original/gidocgen/templates/basic/fonts.css 2022-11-07 09:50:06.000000000 -0500 ++++ gi-docgen-2022.2/gidocgen/templates/basic/fonts.css 2022-11-11 08:23:51.069820380 -0500 +@@ -14,9 +14,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-Regular.woff2") format("woff2"), +- url("RedHatDisplay-Regular.woff") format("woff"); ++ src: local('RedHatDisplay-Regular'); + font-style: normal; + font-weight: 400; + font-display: fallback; +@@ -24,9 +22,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-RegularItalic.woff2") format("woff2"), +- url("RedHatDisplay-RegularItalic.woff") format("woff"); ++ src: local('RedHatDisplay-RegularItalic'); + font-style: italic; + font-weight: 400; + font-display: fallback; +@@ -34,9 +30,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-Medium.woff2") format("woff2"), +- url("RedHatDisplay-Medium.woff") format("woff"); ++ src: local('RedHatDisplay-Medium'); + font-style: normal; + font-weight: 500; + font-display: fallback; +@@ -44,9 +38,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-MediumItalic.woff2") format("woff2"), +- url("RedHatDisplay-MediumItalic.woff") format("woff"); ++ src: local('RedHatDisplay-MediumItalic'); + font-style: italic; + font-weight: 500; + font-display: fallback; +@@ -54,9 +46,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-Bold.woff2") format("woff2"), +- url("RedHatDisplay-Bold.woff") format("woff"); ++ src: local('RedHatDisplay-Bold'); + font-style: normal; + font-weight: 700; + font-display: fallback; +@@ -64,9 +54,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-BoldItalic.woff2") format("woff2"), +- url("RedHatDisplay-BoldItalic.woff") format("woff"); ++ src: local('RedHatDisplay-BoldItalic'); + font-style: italic; + font-weight: 700; + font-display: fallback; +@@ -75,9 +63,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-Black.woff2") format("woff2"), +- url("RedHatDisplay-Black.woff") format("woff"); ++ src: local('RedHatDisplay-Black'); + font-style: normal; + font-weight: 900; + font-display: fallback; +@@ -85,9 +71,7 @@ + + @font-face { + font-family: "Red Hat Display"; +- src: local('RedHatDisplayWeb'), +- url("RedHatDisplay-BlackItalic.woff2") format("woff2"), +- url("RedHatDisplay-BlackItalic.woff") format("woff"); ++ src: local('RedHatDisplay-BlackItalic'); + font-style: italic; + font-weight: 900; + font-display: fallback; +@@ -95,9 +79,7 @@ + + @font-face { + font-family: "Red Hat Text"; +- src: local('RedHatTextWeb'), +- url("RedHatText-Regular.woff2") format("woff2"), +- url("RedHatText-Regular.woff") format("woff"); ++ src: local('RedHatText-Regular'); + font-style: normal; + font-weight: 400; + font-display: fallback; +@@ -105,9 +87,7 @@ + + @font-face { + font-family: "Red Hat Text"; +- src: local('RedHatTextWeb'), +- url("RedHatText-Italic.woff2") format("woff2"), +- url("RedHatText-Italic.woff") format("woff"); ++ src: local('RedHatText-Italic'); + font-style: italic; + font-weight: 400; + font-display: fallback; +@@ -115,9 +95,7 @@ + + @font-face { + font-family: "Red Hat Text"; +- src: local('RedHatTextWeb'), +- url("RedHatText-Medium.woff2") format("woff2"), +- url("RedHatText-Medium.woff") format("woff"); ++ src: local('RedHatText-Medium'); + font-style: normal; + font-weight: 700; + font-display: fallback; +@@ -125,9 +103,7 @@ + + @font-face { + font-family: "Red Hat Text"; +- src: local('RedHatTextWeb'), +- url("RedHatText-MediumItalic.woff2") format("woff2"), +- url("RedHatText-MediumItalic.woff") format("woff"); ++ src: local('RedHatText-MediumItalic'); + font-style: italic; + font-weight: 700; + font-display: fallback; +@@ -135,9 +111,7 @@ + + @font-face { + font-family: "Red Hat Text"; +- src: local('RedHatTextWeb'), +- url("RedHatText-Bold.woff2") format("woff2"), +- url("RedHatText-Bold.woff") format("woff"); ++ src: local('RedHatText-Bold'); + font-style: normal; + font-weight: 900; + font-display: fallback; +@@ -145,22 +119,17 @@ + + @font-face { + font-family: "Red Hat Text"; +- src: local('RedHatTextWeb'), +- url("RedHatText-BoldItalic.woff2") format("woff2"), +- url("RedHatText-BoldItalic.woff") format("woff"); ++ src: local('RedHatText-BoldItalic'); + font-style: italic; + font-weight: 900; + font-display: fallback; + } + +-/* Do not fall back to locally installed SourceCodePro, as there are +- * known bad copies being distributed to this day +- */ + @font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; +- src: url("SourceCodePro-Regular.ttf.woff") format('woff'); ++ src: local('SourceCodePro-Regular'); + font-display: swap; + } + +@@ -168,7 +137,7 @@ + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 400; +- src: url("SourceCodePro-It.ttf.woff") format('woff'); ++ src: local('SourceCodePro-It'); + font-display: swap; + } + +@@ -176,6 +145,6 @@ + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; +- src: url("SourceCodePro-Semibold.ttf.woff") format('woff'); ++ src: local('SourceCodePro-Semibold'); + font-display: swap; + } +diff -Naur gi-docgen-2022.2-original/setup.cfg gi-docgen-2022.2/setup.cfg +--- gi-docgen-2022.2-original/setup.cfg 2022-11-07 09:50:06.000000000 -0500 ++++ gi-docgen-2022.2/setup.cfg 2022-11-11 08:24:25.200224213 -0500 +@@ -74,8 +74,6 @@ + templates/basic/*.html + templates/basic/*.js + templates/basic/*.png +- templates/basic/*.woff2 +- templates/basic/*.woff + py.typed + + [bdist_wheel] diff --git a/base/gi-docgen/gi-docgen.spec b/base/gi-docgen/gi-docgen.spec new file mode 100644 index 0000000..8ce7555 --- /dev/null +++ b/base/gi-docgen/gi-docgen.spec @@ -0,0 +1,346 @@ +## START: Set by rpmautospec +## (rpmautospec version 0.3.5) +## RPMAUTOSPEC: autorelease, autochangelog +%define autorelease(e:s:pb:n) %{?-p:0.}%{lua: + release_number = 2; + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} +## END: Set by rpmautospec + +# Sphinx-generated HTML documentation is not suitable for packaging; see +# https://bugzilla.redhat.com/show_bug.cgi?id=2006555 for discussion. +# +# We can generate PDF documentation as a substitute. +%bcond_with doc_pdf + +Name: gi-docgen +Version: 2023.3 +Release: %autorelease +Summary: Documentation tool for GObject-based libraries + +# Based on the “Copyright and Licensing terms” in README.md, on the contents of +# .reuse/dep5, and on inspection of SPDX headers or other file contents with +# assistance from licensecheck. +# +# The entire source is (Apache-2.0 OR GPL-3.0-or-later) except the following files that are +# packaged or are used to generate packaged files: +# +# (Apache-2.0 OR GPL-3.0-or-later) AND BSD-2-Clause: +# - gidocgen/mdext.py +# +# MIT: +# - gidocgen/templates/basic/fzy.js +# - gidocgen/templates/basic/solarized-{dark,light}.js +# +# CC0-1.0: +# - gi-docgen.pc.in (from which gi-docgen.pc is generated) +# - gidocgen/templates/basic/*.png +# - docs/CODEOWNERS (-doc subpackage) +# - examples/*.toml (-doc subpackage) +# +# Note that CC0-1.0 is allowed in Fedora for content only; all of the above +# files may reasonably be called content. +# +# Additionally, CC0-1.0 appears in certain sample configuration snippets within +# the following files, which are otherwise (Apache-2.0 OR GPL-3.0-or-later): +# - docs/project-configuration.rst +# - docs/tutorial.rst +# On one hand, these are copied from real projects; on the other hand, they are +# very trivial. It’s not obvious whether they should be considered “real” +# CC0-1.0 content or not. +# +# The identifier LGPL-2.1-or-later also appears in a sample configuration +# template in docs/tutorial.rst, but the configuration in question is filled +# with placeholder values and is not copied from a real project, so it’s +# reasonable to consider LGPL-2.1-or-later a placeholder rather than a real +# license as well. +# +# ----- +# +# Additionally, the following sources are under licenses other than (Apache-2.0 +# OR GPL-3.0-or-later), but are not packaged in any of the binary RPMs: +# +# CC0-1.0: +# - .editorconfig (not installed) +# - .gitlab-ci.yml (not installed) +# - gi-docgen.doap (not installed) +# - MANIFEST.in (not installed) +# - pytest.ini (not installed; test only) +# - tests/data/config/*.toml (not installed; test only) +# +# CC-BY-SA-3.0: +# - docs/gi-docgen.{png,svg} (for HTML docs; not currently packaged) +# - code-of-conduct.md (not installed) +# +# OFL-1.1: +# - gidocgen/templates/basic/*.{woff,woff2} (removed in prep) +# +# GPL-2.0-or-later: +# - tests/data/gir/{Utility-1.0,Regress-1.0}.gir (not installed; test only) +# +# LGPL-2.0-or-later: +# - tests/data/gir/{GLib,GObject,Gio}-2.0.gir (not installed; test only) +# +# LGPL-2.0-or-later OR MPL-1.1: +# - tests/data/gir/cairo-1.0.gir (not installed; test only) +License: %{shrink: + (Apache-2.0 OR GPL-3.0-or-later) AND + BSD-2-Clause AND + MIT AND + CC0-1.0 + } +URL: https://gitlab.gnome.org/GNOME/gi-docgen +Source: %{url}/-/archive/%{version}/gi-docgen-%{version}.tar.bz2 + +# We are prohibited from bundling fonts, and we are prohibited from shipping +# fonts in web font formats; see +# https://docs.fedoraproject.org/en-US/packaging-guidelines/FontsPolicy/#_web_fonts. +# +# Since upstream uses *only* web fonts, we need a patch. We haven’t offered it +# upstream since upstream has no reason NOT to use web fonts. +# +# This patch removes all references to WOFF/WOFF2 font files (which we still +# must remove in %%prep) and ensures the CSS correctly references corresponding +# local system fonts. +Patch0: gi-docgen-2022.2-no-web-fonts.patch + +# https://gitlab.gnome.org/GNOME/gi-docgen/-/issues/179 +Patch1: fix-broken-since-obsoletes.patch + +BuildArch: noarch + +BuildRequires: python3-devel + +BuildRequires: python3dist(pytest) + +# Documentation +%if %{with doc_pdf} +BuildRequires: make +BuildRequires: python3dist(sphinx) +BuildRequires: python3dist(sphinx-rtd-theme) +BuildRequires: python3-sphinx-latex +BuildRequires: latexmk +%endif + +# Unbundling fonts: +BuildRequires: font(redhatdisplay) +BuildRequires: font(redhatdisplayblack) +BuildRequires: font(redhatdisplaymedium) +BuildRequires: font(redhattext) +BuildRequires: font(redhattextmedium) +BuildRequires: font(sourcecodepro) +BuildRequires: font(sourcecodeprosemibold) + +# Unbundling fonts: +Requires: gi-docgen-fonts = %{version}-%{release} + +# Trivial fork of https://github.com/jhawthorn/fzy.js (looks like it was +# basically just wrapped in an IIFE). Given that modification, it’s not clear +# how we could unbundle it, either downstream or with some kind of upstream +# support. +# +# It’s not clear what version was used for the fork. +Provides: bundled(js-fzy) + +%description +GI-DocGen is a document generator for GObject-based libraries. GObject is the +base type system of the GNOME project. GI-Docgen reuses the introspection data +generated by GObject-based libraries to generate the API reference of these +libraries, as well as other ancillary documentation. + +GI-DocGen is not a general purpose documentation tool for C libraries. + +While GI-DocGen can be used to generate API references for most GObject/C +libraries that expose introspection data, its main goal is to generate the +reference for GTK and its immediate dependencies. Any and all attempts at +making this tool more generic, or to cover more use cases, will be weighted +heavily against its primary goal. + +GI-DocGen is still in development. The recommended use of GI-DocGen is to add +it as a sub-project to your Meson build system, and vendor it when releasing +dist archives. + +You should not depend on a system-wide installation until GI-DocGen is declared +stable. + + +%package fonts +Summary: Metapackage providing fonts for gi-docgen output +# Really, there is nothing copyrightable in this metapackage, so we give it the +# overall license of the project. +License: Apache-2.0 OR GPL-3.0-or-later + +Requires: font(redhatdisplay) +Requires: font(redhatdisplayblack) +Requires: font(redhatdisplaymedium) +Requires: font(redhattext) +Requires: font(redhattextmedium) +Requires: font(sourcecodepro) +Requires: font(sourcecodeprosemibold) + +%description fonts +Because web fonts from upstream are not bundled in the gi-docgen package, +documentation packages generated with gi-docgen must depend on this metapackage +to ensure the proper system fonts are present. + + +%package doc +Summary: Documentation for gi-docgen +License: (Apache-2.0 OR GPL-3.0-or-later) AND CC0-1.0 + +%description doc +Documentation for gi-docgen. + + +%generate_buildrequires +%pyproject_buildrequires + + +%prep +%autosetup -p1 + +# Remove all bundled fonts. See gi-docgen-*-no-web-fonts.patch. +find . -type f \( -name '*.woff' -o -name '*.woff2' \) -print -delete + + +%build +%pyproject_wheel + +%if %{with doc_pdf} +sphinx-build -b latex -j%{?_smp_build_ncpus} docs %{_vpath_builddir}/_latex +%make_build -C %{_vpath_builddir}/_latex LATEXMKOPTS='-quiet' +%endif + + +%install +%pyproject_install +%pyproject_save_files gidocgen + +install -t '%{buildroot}%{_pkgdocdir}' -D -m 0644 -p \ + CHANGES.md \ + CONTRIBUTING.md \ + docs/CODEOWNERS \ + README.md +%if %{with doc_pdf} +install -t '%{buildroot}%{_pkgdocdir}' -p -m 0644 \ + '%{_vpath_builddir}/_latex/gi-docgen.pdf' +%endif +cp -rp examples '%{buildroot}%{_pkgdocdir}/' + + +%check +%pytest + + +%files -f %{pyproject_files} +%license LICENSES/ .reuse/dep5 + +%{_bindir}/gi-docgen +%{_mandir}/man1/gi-docgen.1* +# Normally, this would go in a -devel package, but there is little point in +# providing a -devel package for *just* the .pc file when there are no +# libraries or headers. +%{_datadir}/pkgconfig/gi-docgen.pc + + +%files fonts +# Empty; this is a metapackage + + +%files doc +%license LICENSES/ .reuse/dep5 +%doc %{_pkgdocdir}/ + + +%changelog +* Mon Dec 18 2023 Michael Catanzaro - 2023.3-2 +- Add patch to fix broken Since/Obsoletes + +* Sun Nov 26 2023 Benjamin A. Beasley - 2023.3-1 +- Update to 2023.3 (close RHBZ#2251397) + +* Sun Nov 26 2023 Benjamin A. Beasley - 2023.1-6 +- Package LICENSES/ as a directory + +* Sun Nov 26 2023 Benjamin A. Beasley - 2023.1-2 +- Don’t assume %%_smp_mflags is -j%%_smp_build_ncpus + +* Sat Jan 07 2023 Benjamin A. Beasley - 2023.1-1 +- Update to 2023.1 (close RHBZ#2158850) + +* Sat Jan 07 2023 Benjamin A. Beasley - 2022.2-4 +- Revert "Temporarily add explicit BR on pyproject-rpm-macros" + +* Sat Jan 07 2023 Miro Hrončok - 2022.2-3 +- Use tomllib (tomli) instated of deprecated python3-toml + +* Sat Jan 07 2023 Benjamin A. Beasley - 2022.2-2 +- Update License to SPDX + +* Sat Jan 07 2023 Benjamin A. Beasley - 2022.2-1 +- Update to 2022.2 (close RHBZ#2140725) + +* Sat Jan 07 2023 Benjamin A. Beasley - 2022.1-11 +- Drop explicit -r for pyproject_buildrequires; no longer needed + +* Sat Jan 07 2023 Benjamin A. Beasley - 2022.1-10 +- Drop code-of-conduct.md from the -doc subpackage + +* Wed Nov 16 2022 Benjamin A. Beasley - 2022.1-9 +- Initial package for EPEL9 (close RHBZ#2072649) + +* Thu Nov 03 2022 Benjamin A. Beasley - 2022.1-8 +- Temporarily add explicit BR on pyproject-rpm-macros + +* Tue Aug 23 2022 Benjamin A. Beasley - 2022.1-7 +- Parallelize sphinx-build + +* Thu Jul 21 2022 Fedora Release Engineering - 2022.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 13 2022 Python Maint - 2022.1-5 +- Rebuilt for Python 3.11 + +* Wed Apr 20 2022 Benjamin A. Beasley - 2022.1-4 +- Drop “forge” macros, which are not doing much here + +* Sat Apr 16 2022 Benjamin A. Beasley - 2022.1-3 +- Update spec file comment + +* Sat Apr 16 2022 Benjamin A. Beasley - 2022.1-2 +- Stop numbering patches + +* Wed Feb 16 2022 Benjamin A. Beasley - 2022.1-1 +- Update to 2022.1 (close RHBZ#2053858) + +* Thu Jan 20 2022 Fedora Release Engineering - 2021.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sat Nov 27 2021 Benjamin A. Beasley - 2021.8-2 +- Reduce LaTeX PDF build verbosity + +* Thu Oct 21 2021 Benjamin A. Beasley - 2021.8-1 +- Update to 2021.8 (close RHBZ#2016447) + +* Thu Oct 21 2021 Benjamin A. Beasley - 2021.7-5 +- Reduce macro indirection in the spec file + +* Wed Sep 29 2021 Benjamin A. Beasley - 2021.7-4 +- Improve comments about test availability + +* Mon Sep 27 2021 Benjamin A. Beasley - 2021.7-3 +- Build PDF docs instead of HTML + +* Sun Sep 12 2021 Benjamin A. Beasley - 2021.7-2 +- Drop BR on pyproject-rpm-macros, now implied by python3-devel + +* Mon Aug 16 2021 Benjamin A. Beasley - 2021.7-1 +- Update to 2021.7 + +* Thu Jul 22 2021 Fedora Release Engineering - 2021.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 25 2021 Benjamin A. Beasley - 2021.6-1 +- Initial package + diff --git a/extras/KF6/misc/hwdata/hwdata-create-pkgconfig.patch b/base/hwdata/hwdata-create-pkgconfig.patch similarity index 100% rename from extras/KF6/misc/hwdata/hwdata-create-pkgconfig.patch rename to base/hwdata/hwdata-create-pkgconfig.patch diff --git a/extras/KF6/misc/hwdata/hwdata.spec b/base/hwdata/hwdata.spec similarity index 100% rename from extras/KF6/misc/hwdata/hwdata.spec rename to base/hwdata/hwdata.spec diff --git a/base/libheif/50aa08176e44178eeffcb7a66f37d7cad074f51b.patch b/base/libheif/50aa08176e44178eeffcb7a66f37d7cad074f51b.patch new file mode 100644 index 0000000..e3ef6b9 --- /dev/null +++ b/base/libheif/50aa08176e44178eeffcb7a66f37d7cad074f51b.patch @@ -0,0 +1,23 @@ +From 50aa08176e44178eeffcb7a66f37d7cad074f51b Mon Sep 17 00:00:00 2001 +From: zhubo +Date: Fri, 29 Dec 2023 23:16:57 +0800 +Subject: [PATCH] Add kvazaar to REQUIRES_PRIVATE + +--- + CMakeLists.txt | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index d996845e39..3a3f51d86f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -234,6 +234,9 @@ endif() + if (X265_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_X265_PLUGIN)) + list(APPEND REQUIRES_PRIVATE "x265") + endif() ++if (KVAZAAR_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_KVAZAAR_PLUGIN)) ++ list(APPEND REQUIRES_PRIVATE "kvazaar") ++endif() + if ((AOM_DECODER_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_AOM_DECODER_PLUGIN)) + OR (AOM_ENCODER_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_AOM_ENCODER_PLUGIN))) + list(APPEND REQUIRES_PRIVATE "aom") diff --git a/base/libheif/877de6b398198bca387df791b9232922c5721c80.patch b/base/libheif/877de6b398198bca387df791b9232922c5721c80.patch new file mode 100644 index 0000000..852ca50 --- /dev/null +++ b/base/libheif/877de6b398198bca387df791b9232922c5721c80.patch @@ -0,0 +1,42 @@ +From 877de6b398198bca387df791b9232922c5721c80 Mon Sep 17 00:00:00 2001 +From: zhailiangliang +Date: Thu, 21 Dec 2023 15:45:29 +0800 +Subject: [PATCH] fix memory leaks in function JpegEncoder::Encode + +--- + examples/encoder_jpeg.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/examples/encoder_jpeg.cc b/examples/encoder_jpeg.cc +index 6a8bae163a..b82f8aa39b 100644 +--- a/examples/encoder_jpeg.cc ++++ b/examples/encoder_jpeg.cc +@@ -179,6 +179,9 @@ bool JpegEncoder::Encode(const struct heif_image_handle* handle, + uint32_t skip = (exifdata[0]<<24) | (exifdata[1]<<16) | (exifdata[2]<<8) | exifdata[3]; + if (skip > (exifsize - 4)) { + fprintf(stderr, "Invalid EXIF data (offset too large)\n"); ++ free(exifdata); ++ jpeg_destroy_compress(&cinfo); ++ fclose(fp); + return false; + } + skip += 4; +@@ -188,6 +191,9 @@ bool JpegEncoder::Encode(const struct heif_image_handle* handle, + + if (size > std::numeric_limits::max()) { + fprintf(stderr, "EXIF larger than 4GB is not supported"); ++ free(exifdata); ++ jpeg_destroy_compress(&cinfo); ++ fclose(fp); + return false; + } + +@@ -258,6 +264,8 @@ bool JpegEncoder::Encode(const struct heif_image_handle* handle, + + if (heif_image_get_bits_per_pixel(image, heif_channel_Y) != 8) { + fprintf(stderr, "JPEG writer cannot handle image with >8 bpp.\n"); ++ jpeg_destroy_compress(&cinfo); ++ fclose(fp); + return false; + } + diff --git a/base/libheif/90955e3118d687fa8c36747a7b349caebc82707d.patch b/base/libheif/90955e3118d687fa8c36747a7b349caebc82707d.patch new file mode 100644 index 0000000..b967bd2 --- /dev/null +++ b/base/libheif/90955e3118d687fa8c36747a7b349caebc82707d.patch @@ -0,0 +1,21 @@ +From 90955e3118d687fa8c36747a7b349caebc82707d Mon Sep 17 00:00:00 2001 +From: zhailiangliang +Date: Thu, 11 Jan 2024 17:48:52 +0800 +Subject: [PATCH] Fix potential memory leak in file heif_convert.cc + +--- + examples/heif_convert.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/examples/heif_convert.cc b/examples/heif_convert.cc +index 0e3cb4d2de..e57573235c 100644 +--- a/examples/heif_convert.cc ++++ b/examples/heif_convert.cc +@@ -609,6 +609,7 @@ int main(int argc, char** argv) + const char* auxTypeC = nullptr; + err = heif_image_handle_get_auxiliary_type(aux_handle, &auxTypeC); + if (err.code) { ++ heif_image_release(aux_image); + heif_image_handle_release(aux_handle); + heif_image_handle_release(handle); + std::cerr << "Could not get type of auxiliary image: " << err.message << "\n"; diff --git a/base/libheif/9598ddeb3dff4e51a9989067e912baf502410cee.patch b/base/libheif/9598ddeb3dff4e51a9989067e912baf502410cee.patch new file mode 100644 index 0000000..7674268 --- /dev/null +++ b/base/libheif/9598ddeb3dff4e51a9989067e912baf502410cee.patch @@ -0,0 +1,141 @@ +From 9598ddeb3dff4e51a9989067e912baf502410cee Mon Sep 17 00:00:00 2001 +From: Heiko Lewin +Date: Sun, 10 Mar 2024 13:32:18 +0100 +Subject: [PATCH] encoder_kvazaar.cc: Fix some memory leaks + +--- + libheif/plugins/encoder_kvazaar.cc | 50 +++++++++++++----------------- + 1 file changed, 22 insertions(+), 28 deletions(-) + +diff --git a/libheif/plugins/encoder_kvazaar.cc b/libheif/plugins/encoder_kvazaar.cc +index eada77f9fe..158f174b04 100644 +--- a/libheif/plugins/encoder_kvazaar.cc ++++ b/libheif/plugins/encoder_kvazaar.cc +@@ -361,6 +361,11 @@ static void copy_plane(kvz_pixel* out_p, + } + + ++template ++std::unique_ptr make_guard(T* ptr, D&& deleter) { ++ return std::unique_ptr(ptr, deleter); ++} ++ + static struct heif_error kvazaar_encode_image(void* encoder_raw, const struct heif_image* image, + heif_image_input_class input_class) + { +@@ -380,7 +385,8 @@ static struct heif_error kvazaar_encode_ + return err; + } + +- kvz_config* config = api->config_alloc(); ++ auto uconfig = make_guard(api->config_alloc(), [api](kvz_config* cfg) { api->config_destroy(cfg); }); ++ kvz_config* config = uconfig.get(); + api->config_init(config); // param, encoder->preset.c_str(), encoder->tune.c_str()); + #if HAVE_KVAZAAR_ENABLE_LOGGING + config->enable_logging_output = 0; +@@ -541,9 +547,9 @@ static struct heif_error kvazaar_encode_ + } + */ + +- kvz_picture* pic = api->picture_alloc_csp(kvzChroma, encoded_width, encoded_height); ++ auto upic = make_guard(api->picture_alloc_csp(kvzChroma, encoded_width, encoded_height), [api](kvz_picture* pic) { api->picture_free(pic); }); ++ kvz_picture* pic = upic.get(); + if (!pic) { +- api->config_destroy(config); + return heif_error{ + heif_error_Encoder_plugin_error, + heif_suberror_Encoder_encoding, +@@ -573,11 +579,9 @@ static struct heif_error kvazaar_encode_ + encoded_width >> chroma_stride_shift, encoded_height >> chroma_height_shift); + } + +- kvz_encoder* kvzencoder = api->encoder_open(config); ++ auto uencoder = make_guard(api->encoder_open(config), [api](kvz_encoder* e) { api->encoder_close(e); }); ++ kvz_encoder* kvzencoder = uencoder.get(); + if (!kvzencoder) { +- api->picture_free(pic); +- api->config_destroy(config); +- + return heif_error{ + heif_error_Encoder_plugin_error, + heif_suberror_Encoder_encoding, +@@ -586,14 +590,18 @@ static struct heif_error kvazaar_encode_ + } + + kvz_data_chunk* data = nullptr; ++ auto free_data = [api](kvz_data_chunk** data){ ++ if(*data) { ++ api->chunk_free(*data); ++ *data = nullptr; ++ } ++ }; ++ auto data_deleter = std::unique_ptr(&data, free_data); ++ + uint32_t data_len; + int success; + success = api->encoder_headers(kvzencoder, &data, &data_len); + if (!success) { +- api->picture_free(pic); +- api->config_destroy(config); +- api->encoder_close(kvzencoder); +- + return heif_error{ + heif_error_Encoder_plugin_error, + heif_suberror_Encoder_encoding, +@@ -602,17 +610,13 @@ static struct heif_error kvazaar_encode_ + } + + append_chunk_data(data, encoder->output_data); ++ free_data(&data); + + success = api->encoder_encode(kvzencoder, + pic, + &data, &data_len, + nullptr, nullptr, nullptr); + if (!success) { +- api->chunk_free(data); +- api->picture_free(pic); +- api->config_destroy(config); +- api->encoder_close(kvzencoder); +- + return heif_error{ + heif_error_Encoder_plugin_error, + heif_suberror_Encoder_encoding, +@@ -621,6 +625,7 @@ static struct heif_error kvazaar_encode_ + } + + append_chunk_data(data, encoder->output_data); ++ free_data(&data); + + for (;;) { + success = api->encoder_encode(kvzencoder, +@@ -628,11 +633,6 @@ static struct heif_error kvazaar_encode_ + &data, &data_len, + nullptr, nullptr, nullptr); + if (!success) { +- api->chunk_free(data); +- api->picture_free(pic); +- api->config_destroy(config); +- api->encoder_close(kvzencoder); +- + return heif_error{ + heif_error_Encoder_plugin_error, + heif_suberror_Encoder_encoding, +@@ -645,16 +645,10 @@ static struct heif_error kvazaar_encode_ + } + + append_chunk_data(data, encoder->output_data); ++ free_data(&data); + } + + (void) success; +- +- api->chunk_free(data); +- +- api->encoder_close(kvzencoder); +- api->picture_free(pic); +- api->config_destroy(config); +- + return heif_error_ok; + } + diff --git a/base/libheif/a911b26a902c5f89fee2dc20ac4dfaafcb8144ec.patch b/base/libheif/a911b26a902c5f89fee2dc20ac4dfaafcb8144ec.patch new file mode 100644 index 0000000..e3f3374 --- /dev/null +++ b/base/libheif/a911b26a902c5f89fee2dc20ac4dfaafcb8144ec.patch @@ -0,0 +1,22 @@ +From a911b26a902c5f89fee2dc20ac4dfaafcb8144ec Mon Sep 17 00:00:00 2001 +From: Andrey Semashev +Date: Fri, 15 Mar 2024 17:46:48 +0300 +Subject: [PATCH] Fix compilation with libsvtav1 2.0.0. + +--- + libheif/plugins/encoder_svt.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libheif/plugins/encoder_svt.cc b/libheif/plugins/encoder_svt.cc +index 4597d7b8fc..1ff3bce2d5 100644 +--- a/libheif/plugins/encoder_svt.cc ++++ b/libheif/plugins/encoder_svt.cc +@@ -646,7 +646,7 @@ struct heif_error svt_encode_image(void* encoder_raw, const struct heif_image* i + + if (nclx) { + svt_config.color_description_present_flag = true; +-#if SVT_AV1_VERSION_MAJOR == 1 ++#if SVT_AV1_VERSION_MAJOR >= 1 + svt_config.color_primaries = static_cast(nclx->color_primaries); + svt_config.transfer_characteristics = static_cast(nclx->transfer_characteristics); + svt_config.matrix_coefficients = static_cast(nclx->matrix_coefficients); diff --git a/base/libheif/bef5f0f49f9024957189b5b465cd4d07078cd06f.patch b/base/libheif/bef5f0f49f9024957189b5b465cd4d07078cd06f.patch new file mode 100644 index 0000000..256c6e4 --- /dev/null +++ b/base/libheif/bef5f0f49f9024957189b5b465cd4d07078cd06f.patch @@ -0,0 +1,36 @@ +From bef5f0f49f9024957189b5b465cd4d07078cd06f Mon Sep 17 00:00:00 2001 +From: Brad Hards +Date: Sat, 6 Jan 2024 13:59:21 +1100 +Subject: [PATCH] kvazaar: protect against unexpected chroma values + +Resolves #1089 +--- + libheif/plugins/encoder_kvazaar.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/libheif/plugins/encoder_kvazaar.cc b/libheif/plugins/encoder_kvazaar.cc +index 408f1bf84d..eada77f9fe 100644 +--- a/libheif/plugins/encoder_kvazaar.cc ++++ b/libheif/plugins/encoder_kvazaar.cc +@@ -35,6 +35,7 @@ extern "C" { + + static const char* kError_unspecified_error = "Unspecified encoder error"; + static const char* kError_unsupported_bit_depth = "Bit depth not supported by kvazaar"; ++static const char* kError_unsupported_chroma = "Unsupported chroma type"; + //static const char* kError_unsupported_image_size = "Images smaller than 16 pixels are not supported"; + + +@@ -492,6 +493,13 @@ static struct heif_error kvazaar_encode_image(void* encoder_raw, const struct he + input_chroma_width = input_width; + input_chroma_height = input_height; + } ++ else { ++ return heif_error{ ++ heif_error_Encoder_plugin_error, ++ heif_suberror_Unsupported_image_type, ++ kError_unsupported_chroma ++ }; ++ } + + if (chroma != heif_chroma_monochrome) { + int w = heif_image_get_width(image, heif_channel_Y); diff --git a/base/libheif/dfd88deb1d80b4195ef16cddad256f33b46fbe29.patch b/base/libheif/dfd88deb1d80b4195ef16cddad256f33b46fbe29.patch new file mode 100644 index 0000000..12fcb45 --- /dev/null +++ b/base/libheif/dfd88deb1d80b4195ef16cddad256f33b46fbe29.patch @@ -0,0 +1,22 @@ +From dfd88deb1d80b4195ef16cddad256f33b46fbe29 Mon Sep 17 00:00:00 2001 +From: Brad Hards +Date: Wed, 17 Jan 2024 11:47:15 +1100 +Subject: [PATCH] examples: fix leak in PNG decoder + +This shows up with heif-enc (e.g. with --avif) under valgrind +--- + examples/decoder_png.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/examples/decoder_png.cc b/examples/decoder_png.cc +index 5742f02653..c3eeed88a8 100644 +--- a/examples/decoder_png.cc ++++ b/examples/decoder_png.cc +@@ -419,6 +419,7 @@ InputImage loadPNG(const char* filename, int output_bit_depth) + } // for + + delete[] row_pointers; ++ fclose(fh); + + input_image.image = std::shared_ptr(image, + [](heif_image* img) { heif_image_release(img); }); diff --git a/base/libheif/libheif-no-hevc-tests.patch b/base/libheif/libheif-no-hevc-tests.patch new file mode 100644 index 0000000..387aff2 --- /dev/null +++ b/base/libheif/libheif-no-hevc-tests.patch @@ -0,0 +1,17 @@ +diff -up libheif-1.16.2/tests/encode.cc.no-hevc libheif-1.16.2/tests/encode.cc +--- libheif-1.16.2/tests/encode.cc.no-hevc 2023-05-22 21:00:47.000000000 +0200 ++++ libheif-1.16.2/tests/encode.cc 2023-09-08 14:22:08.408234336 +0200 +@@ -148,11 +148,13 @@ static void test_ispe_size(heif_compress + + TEST_CASE( "ispe odd size", "[heif_context]" ) { + ++#if 0 + // HEVC encoders typically encode with even dimensions only + test_ispe_size(heif_compression_HEVC, heif_orientation_normal, 121,99, 122,100); + test_ispe_size(heif_compression_HEVC, heif_orientation_rotate_180, 121,99, 122,100); + test_ispe_size(heif_compression_HEVC, heif_orientation_rotate_90_cw, 121,99, 122,100); + test_ispe_size(heif_compression_HEVC, heif_orientation_rotate_90_cw, 120,100, 120,100); ++#endif + + // AVIF encoders typically encode with odd dimensions + test_ispe_size(heif_compression_AV1, heif_orientation_normal, 121,99, 121,99); diff --git a/base/libheif/libheif.spec b/base/libheif/libheif.spec new file mode 100644 index 0000000..e851b5a --- /dev/null +++ b/base/libheif/libheif.spec @@ -0,0 +1,338 @@ +%global somajor 1 + +# Unable to ship this in Fedora +%bcond_with hevc + +%bcond_with check + +Name: libheif +Version: 1.17.6 +Release: 1%{?dist} +Summary: HEIF and AVIF file format decoder and encoder + +License: LGPL-3.0-or-later and MIT +URL: https://github.com/strukturag/libheif +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Patch0: libheif-no-hevc-tests.patch + +# Fix for CVE-2024-25269 (https://github.com/strukturag/libheif/issues/1073) +Patch1: https://github.com/strukturag/libheif/commit/877de6b398198bca387df791b9232922c5721c80.patch +# Fix compilation with libsvtav1 2.0.0. +Patch2: https://github.com/strukturag/libheif/commit/a911b26a902c5f89fee2dc20ac4dfaafcb8144ec.patch +# Backport memory leaks fix from master +Patch3: https://github.com/strukturag/libheif/commit/9598ddeb3dff4e51a9989067e912baf502410cee.patch +Patch4: https://github.com/strukturag/libheif/commit/dfd88deb1d80b4195ef16cddad256f33b46fbe29.patch +Patch5: https://github.com/strukturag/libheif/commit/90955e3118d687fa8c36747a7b349caebc82707d.patch +Patch6: https://github.com/strukturag/libheif/commit/bef5f0f49f9024957189b5b465cd4d07078cd06f.patch +Patch7: https://github.com/strukturag/libheif/commit/50aa08176e44178eeffcb7a66f37d7cad074f51b.patch + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: ninja-build +BuildRequires: pkgconfig(aom) +BuildRequires: pkgconfig(dav1d) +BuildRequires: pkgconfig(libjpeg) +BuildRequires: pkgconfig(libopenjp2) +BuildRequires: pkgconfig(libpng) +%if ! (0%{?rhel} && 0%{?rhel} <= 9) +BuildRequires: pkgconfig(libsharpyuv) +BuildRequires: pkgconfig(rav1e) +BuildRequires: pkgconfig(SvtAv1Enc) +%endif + +%description +libheif is an ISO/IEC 23008-12:2017 HEIF and AVIF (AV1 Image File Format) +file format decoder and encoder. + +%files +%license COPYING +%doc README.md +%{_libdir}/*.so.%{somajor}{,.*} +%dir %{_libdir}/%{name} +%if ! (0%{?rhel} && 0%{?rhel} <= 9) +%{_libdir}/%{name}/%{name}-rav1e.so +%{_libdir}/%{name}/%{name}-svtenc.so +%endif + +# ---------------------------------------------------------------------- + +%package -n heif-pixbuf-loader +Summary: HEIF image loader for GTK+ applications +BuildRequires: pkgconfig(gdk-pixbuf-2.0) +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: gdk-pixbuf2%{?_isa} + +%description -n heif-pixbuf-loader +This package provides a plugin to load HEIF files in GTK+ applications. + +%files -n heif-pixbuf-loader +%{_libdir}/gdk-pixbuf-2.0/*/loaders/libpixbufloader-heif.so + +# ---------------------------------------------------------------------- + +%package tools +Summary: Tools for manipulating HEIF files +License: MIT +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: shared-mime-info + +%description tools +This package provides tools for manipulating HEIF files. + +%files tools +%{_bindir}/heif-* +%{_mandir}/man1/heif-* +%{_datadir}/thumbnailers/heif.thumbnailer + +# ---------------------------------------------------------------------- + +%if %{with hevc} +%package hevc +Summary: HEVC codec support for HEIC files +BuildRequires: pkgconfig(libde265) +BuildRequires: pkgconfig(x265) +Supplements: %{name} + +%description hevc +This package adds support for HEVC-encoded HEIC files to applications +that use %{name} to read HEIF image files. + +%files hevc +%{_libdir}/%{name}/%{name}-libde265.so +%{_libdir}/%{name}/%{name}-x265.so +%endif + +# ---------------------------------------------------------------------- + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/cmake/%{name}/ +%{_libdir}/pkgconfig/%{name}.pc +%{_libdir}/*.so + +# ---------------------------------------------------------------------- + + +%prep +%setup -q +%if %{without hevc} +%patch0 -p1 +%endif +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +rm -rf third-party/ + + +%build +%cmake \ + -GNinja \ + -DPLUGIN_DIRECTORY=%{_libdir}/%{name} \ + -DWITH_DAV1D=ON \ + -DWITH_DAV1D_PLUGIN=OFF \ + -DWITH_JPEG_DECODER=ON \ + -DWITH_JPEG_ENCODER=ON \ + -DWITH_OpenJPEG_DECODER=ON \ + -DWITH_OpenJPEG_DECODER_PLUGIN=OFF \ + -DWITH_OpenJPEG_ENCODER=ON \ + -DWITH_OpenJPEG_ENCODER_PLUGIN=OFF \ +%if ! (0%{?rhel} && 0%{?rhel} <= 9) + -DWITH_RAV1E=ON \ + -DWITH_SvtEnc=ON \ +%endif + -DWITH_UNCOMPRESSED_CODEC=ON \ + %{?with_check:-DBUILD_TESTING=ON -DWITH_REDUCED_VISIBILITY=OFF} \ + %{?with_hevc:-DWITH_LIBDE265_PLUGIN:BOOL=ON -DWITH_X265_PLUGIN:BOOL=ON} \ + -Wno-dev + +%cmake_build + + +%install +%cmake_install + + +%if %{with check} +%check +# Tests are not yet ported to CMake +%ctest +%endif + + +%changelog +* Sat Apr 13 2024 Robert-André Mauchin - 1.17.6-`1 +- Update to 1.17.6 +- Security fix for CVE-2024-25269 +- Close: rhbz#2255512 +- Fix: rhbz#2267897 + +* Thu Jan 25 2024 Fedora Release Engineering - 1.17.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 1.17.5-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 12 2024 Fabio Valentini - 1.17.5-2 +- Rebuild for dav1d 1.3.0 + +* Fri Dec 15 2023 Dominik Mierzejewski - 1.17.5-2 +- Update to 1.17.5 (rhbz#2244583) +- Backport fixes for: CVE-2023-49460 (rhbz#2253575, rhbz#2253576) + CVE-2023-49462 (rhbz#2253567, rhbz#2253568) + CVE-2023-49463 (rhbz#2253565, rhbz#2253566) + CVE-2023-49464 (rhbz#2253562, rhbz#2253563) +- Simplify conditionals for rav1e and svt-av1 encoders +- Enable JPEG2000 and dav1d decoders/encoders + +* Fri Sep 08 2023 Dominik Mierzejewski - 1.16.2-2 +- Enable uncompressed codec (rhbz#2237849) +- Run tests conditionally (requires making all symbols visible) +- Disable HEVC tests when building without HEVC codec + +* Fri Jul 28 2023 Orion Poplawski - 1.16.2-1 +- Update to 1.16.2 + +* Thu Jul 20 2023 Fedora Release Engineering - 1.16.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri May 05 2023 Neal Gompa - 1.16.1-1 +- Update to 1.16.1 + +* Sun Apr 30 2023 Dominik Mierzejewski - 1.15.2-2 +- backport fix for issue#590 + +* Tue Apr 11 2023 Sandro - 1.15.2-1 +- Update to 1.15.2 (RHBZ#2183664) +- Drop patch + +* Fri Mar 17 2023 Neal Gompa - 1.15.1-2 +- Adapt for Fedora + +* Fri Feb 17 2023 Leigh Scott - 1.15.1-1 +- Update to 1.15.1 + +* Sat Jan 07 2023 Leigh Scott - 1.14.2-1 +- Update to 1.14.2 +- Switch back to autotools to build due to cmake issues (rfbz#6550} + +* Thu Jan 05 2023 Leigh Scott - 1.14.1-1 +- Update to 1.14.1 + +* Mon Dec 19 2022 Leigh Scott - 1.14.0-4 +- Don't build rav1e and SVT-AV1 as plugins (rfbz#6532) + +* Mon Dec 05 2022 Nicolas Chauvet - 1.14.0-3 +- Fix for SvtAv1Enc in devel - rfbz#6521 + +* Wed Nov 23 2022 Nicolas Chauvet - 1.14.0-2 +- Enable svt-av1 on el9 + +* Tue Nov 15 2022 Leigh Scott - 1.14.0-1 +- Update to 1.14.0 + +* Fri Sep 02 2022 Leigh Scott - 1.13.0-1 +- Update to 1.13.0 + +* Sun Aug 07 2022 RPM Fusion Release Engineering - 1.12.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild and ffmpeg + 5.1 + +* Thu Jun 23 2022 Robert-André Mauchin - 1.12.0-5 +- Rebuilt for new dav1d, rav1e and jpegxl + +* Wed Feb 09 2022 RPM Fusion Release Engineering - 1.12.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Nov 25 2021 Nicolas Chauvet - 1.12.0-3 +- Rebuilt + +* Tue Aug 03 2021 RPM Fusion Release Engineering - 1.12.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jun 14 2021 Leigh Scott - 1.12.0-1 +- Update to 1.12.0 + +* Sun Jun 13 2021 Robert-André Mauchin - 1.11.0-3 +- Rebuild for new aom + +* Wed Apr 14 2021 Leigh Scott - 1.11.0-2 +- Rebuild for new x265 + +* Sat Feb 20 2021 Leigh Scott - 1.11.0-1 +- Update to 1.11.0 + +* Wed Feb 03 2021 RPM Fusion Release Engineering - 1.10.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sat Dec 19 2020 Leigh Scott - 1.10.0-1 +- Update to 1.10.0 + +* Mon Dec 14 2020 Leigh Scott - 1.9.1-3 +- Actually do the dav1d rebuild + +* Mon Dec 14 2020 Robert-André Mauchin - 1.9.1-2 +- Rebuild for dav1d SONAME bump + +* Tue Oct 27 2020 Leigh Scott - 1.9.1-1 +- Update to 1.9.1 + +* Fri Aug 28 2020 Leigh Scott - 1.8.0-1 +- Update to 1.8.0 + +* Tue Aug 18 2020 RPM Fusion Release Engineering - 1.7.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jul 08 2020 Leigh Scott - 1.7.0-2 +- Rebuilt + +* Thu Jun 04 2020 Leigh Scott - 1.7.0-1 +- Update to 1.7.0 + +* Sun May 31 2020 Leigh Scott - 1.6.2-3 +- Rebuild for new x265 version + +* Sun Feb 23 2020 RPM Fusion Release Engineering - 1.6.2-2 +- Rebuild for x265 + +* Mon Feb 10 2020 Leigh Scott - 1.6.2-1 +- Update to 1.6.2 + +* Tue Feb 04 2020 RPM Fusion Release Engineering - 1.6.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Nov 28 2019 Leigh Scott - 1.6.0-1 +- Update to 1.6.0 +- Rebuilt for x265 + +* Sun Nov 03 2019 Leigh Scott - 1.5.1-1 +- Update to 1.5.1 + +* Fri Aug 09 2019 RPM Fusion Release Engineering - 1.4.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 02 2019 Nicolas Chauvet - 1.4.0-3 +- Rebuilt for x265 + +* Mon Mar 04 2019 RPM Fusion Release Engineering - 1.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Feb 28 2019 Leigh Scott - 1.4.0-1 +- Update to 1.4.0 + +* Thu Jan 03 2019 Leigh Scott - 1.3.2-2 +- Rebuild for new x265 for el7 + +* Thu Nov 29 2018 Leigh Scott - 1.3.2-1 +- First build diff --git a/base/python-markdown/python-markdown.spec b/base/python-markdown/python-markdown.spec new file mode 100644 index 0000000..760a024 --- /dev/null +++ b/base/python-markdown/python-markdown.spec @@ -0,0 +1,65 @@ +%define oname Markdown +%global pkgname markdown + +Summary: Python implementation of the markdown text-to-HTML conversion tool +Name: python-markdown +Version: 3.5.1 +Release: 1%{dist} +Source: https://files.pythonhosted.org/packages/source/M/Markdown/%oname-%version.tar.gz +License: BSD +Group: Development/Python +BuildRequires: python%{python3_pkgversion}-devel +#BuildRequires: python-pkg-resources +BuildRequires: python%{python3_pkgversion}-setuptools +BuildRequires: python%{python3_pkgversion}-wheel +BuildRequires: python%{python3_pkgversion}-nose +BuildRequires: python%{python3_pkgversion}-yaml +BuildRequires: pyproject-rpm-macros +Url: http://www.freewisdom.org/projects/python-markdown/ + + +%global _description %{expand: +This is a Python implementation of John Gruber's Markdown. It is almost +completely compliant with the reference implementation, though there +are a few known issues + +Markdown is a text-to-HTML conversion tool for web writers. Markdown +allows you to write using an easy-to-read, easy-to-write plain text format, +then convert it to structurally valid XHTML (or HTML).} + +%description +%_description + +%package -n python%{python3_pkgversion}-%{pkgname} +Summary: %{summary} +BuildArch: noarch +%{?python_provide:%python_provide python%{python3_pkgversion}-%{pkgname}} + +%description -n python%{python3_pkgversion}-%{pkgname} %_description + +%prep +%setup -q -n %oname-%version +# remove shebangs +find markdown -type f -name '*.py' \ + -exec sed -i -e '/^#!/{1D}' {} \; + +# fix line-ending +find docs -type f \ + -exec sed -i 's/\r//' {} \; + +sed -i '/importlib-metadata>=4.4/d' pyproject.toml +sed -i '/importlib-metadata>=4.4/d' Markdown.egg-info/requires.txt + +%build +%pyproject_wheel + +%install +%pyproject_install + +# rename binary +mv %{buildroot}%{_bindir}/markdown_py{,-%{python3_version}} + +%files -n python%{python3_pkgversion}-%{pkgname} +%{python3_sitelib}/* +%{_bindir}/markdown_py-%{python3_version} + diff --git a/base/python-markupsafe/python-markupsafe.spec b/base/python-markupsafe/python-markupsafe.spec index 1db8e89..f17892e 100644 --- a/base/python-markupsafe/python-markupsafe.spec +++ b/base/python-markupsafe/python-markupsafe.spec @@ -11,6 +11,7 @@ BuildRequires: pyproject-rpm-macros BuildRequires: python%{python3_pkgversion}-devel BuildRequires: python%{python3_pkgversion}-setuptools BuildRequires: python%{python3_pkgversion}-wheel +BuildRequires: python%{python3_pkgversion}-pip BuildRequires: python%{python3_pkgversion}-pytest %global _description %{expand: diff --git a/base/python-pygdbmi/python-pygdbmi.spec b/base/python-pygdbmi/python-pygdbmi.spec new file mode 100644 index 0000000..a0aadd7 --- /dev/null +++ b/base/python-pygdbmi/python-pygdbmi.spec @@ -0,0 +1,71 @@ +## START: Set by rpmautospec +## (rpmautospec version 0.3.5) +## RPMAUTOSPEC: autorelease, autochangelog +%define autorelease(e:s:pb:n) %{?-p:0.}%{lua: + release_number = 1; + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} +## END: Set by rpmautospec + +Name: python-pygdbmi +Version: 0.11.0.0 +Release: %autorelease +Summary: Get Structured Output from GDB's Machine Interface +License: MIT +URL: https://github.com/cs01/pygdbmi +Source0: %{url}/archive/v%{version}/%{name}-v%{version}.tar.gz + +BuildArch: noarch +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-wheel +BuildRequires: python%{python3_pkgversion}-pip +BuildRequires: python%{python3_pkgversion}-setuptools +BuildRequires: make +BuildRequires: gcc-c++ +BuildRequires: gdb + +%global _description \ +GDB/MI is a line based machine oriented \ +text interface to GDB and is activated by \ +specifying using the --interpreter command \ +line option (see Mode Options). It is\ +specifically intended to support the development\ +of systems which use the debugger as just one\ +small component of a larger system. + + +%description %{_description} + + +%package -n python%{python3_pkgversion}-pygdbmi +Summary: %{summary} + + +%description -n python%{python3_pkgversion}-pygdbmi %{_description} + + +%prep +%autosetup -n pygdbmi-%{version} + + +%build +%pyproject_wheel + + +%install +%pyproject_install +%pyproject_save_files pygdbmi + +%check +%pytest + +%files -n python%{python3_pkgversion}-pygdbmi +%doc README.md +%license LICENSE +%{python3_sitelib}/pygdbmi +%{python3_sitelib}/pygdbmi-%{version}.dist-info + +%changelog +* Sun Sep 24 2023 Steve Cossette - 0.11.0.0-1 +- Initial import (fedora#2239637). diff --git a/base/python-sentry-sdk/python-sentry-sdk.spec b/base/python-sentry-sdk/python-sentry-sdk.spec new file mode 100644 index 0000000..d42676b --- /dev/null +++ b/base/python-sentry-sdk/python-sentry-sdk.spec @@ -0,0 +1,39 @@ +%define pypi_name sentry_sdk + +Name: python-sentry-sdk +Version: 1.45.0 +Release: 1%{dist} +Summary: Python client for Sentry (https://sentry.io) +License: MIT +Group: Development/Python +URL: https://pypi.org/project/sentry-sdk/ +Source0: https://files.pythonhosted.org/packages/source/s/sentry-sdk/sentry-sdk-%{version}.tar.gz +BuildArch: noarch + +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}dist(pip) + +%description +Python client for Sentry (https://sentry.io). + +%package -n python%{python3_pkgversion}-sentry-sdk +Summary: Python3 client for Sentry (https://sentry.io) +Group: Development/Python + +%description -n python%{python3_pkgversion}-sentry-sdk +Python 3 client for Sentry (https://sentry.io). + + +%prep +%autosetup -p1 -n sentry-sdk-%{version} + +%build +%pyproject_wheel + +%install +%pyproject_install +%pyproject_save_files %{pypi_name} + +%files -n python%{python3_pkgversion}-sentry-sdk -f %{pyproject_files} +%doc README.md +%license LICENSE diff --git a/extras/KF6/misc/python-smartypants/python-smartypants.spec b/base/python-smartypants/python-smartypants.spec similarity index 100% rename from extras/KF6/misc/python-smartypants/python-smartypants.spec rename to base/python-smartypants/python-smartypants.spec diff --git a/base/python-twisted/0001-Import-gobject-from-gi.repository-in-Python-3.patch b/base/python-twisted/0001-Import-gobject-from-gi.repository-in-Python-3.patch new file mode 100644 index 0000000..0dff755 --- /dev/null +++ b/base/python-twisted/0001-Import-gobject-from-gi.repository-in-Python-3.patch @@ -0,0 +1,32 @@ +From 7b9f460346a259862189f84a30fedd96ca70e1c6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= +Date: Wed, 22 May 2019 18:13:32 +0200 +Subject: [PATCH 1/4] Import gobject from gi.repository in Python 3 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Robert-André Mauchin +--- + src/twisted/internet/gtk2reactor.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/twisted/internet/gtk2reactor.py b/src/twisted/internet/gtk2reactor.py +index faf1234645..19d97445c4 100644 +--- a/src/twisted/internet/gtk2reactor.py ++++ b/src/twisted/internet/gtk2reactor.py +@@ -42,7 +42,10 @@ try: + except (ImportError, AttributeError): + pass # maybe we're using pygtk before this hack existed. + +-import gobject ++try: ++ import gobject ++except ImportError: ++ from gi.repository import GObject as gobject + if hasattr(gobject, "threads_init"): + # recent versions of python-gtk expose this. python-gtk=2.4.1 + # (wrapping glib-2.4.7) does. python-gtk=2.0.0 (wrapping +-- +2.39.2 + diff --git a/base/python-twisted/0002-Fix-CVE-2020-10108-and-CVE-2020-10109.patch b/base/python-twisted/0002-Fix-CVE-2020-10108-and-CVE-2020-10109.patch new file mode 100644 index 0000000..30990e6 --- /dev/null +++ b/base/python-twisted/0002-Fix-CVE-2020-10108-and-CVE-2020-10109.patch @@ -0,0 +1,393 @@ +From f62266fdd5feeec45d2037411fa0c83964e751a7 Mon Sep 17 00:00:00 2001 +From: Tom Most +Date: Mon, 3 Jun 2019 22:03:22 -0700 +Subject: [PATCH 2/4] Fix CVE-2020-10108 and CVE-2020-10109 + +Refactor to reduce duplication + +(cherry picked from commit d2f6dd9b3766509f40c980aac67ca8475da67c6f) + +Fix several request smuggling attacks. + +1. Requests with multiple Content-Length headers were allowed (thanks +to Jake Miller from Bishop Fox and ZeddYu Lu) and now fail with a 400; + +2. Requests with a Content-Length header and a Transfer-Encoding +header honored the first header (thanks to Jake Miller from Bishop +Fox) and now fail with a 400; + +3. Requests whose Transfer-Encoding header had a value other than +"chunked" and "identity" (thanks to ZeddYu Lu) were allowed and now fail +with a 400. + +(cherry picked from commit 4a7d22e490bb8ff836892cc99a1f54b85ccb0281) +--- + src/twisted/web/http.py | 64 +++++-- + src/twisted/web/newsfragments/9770.bugfix | 1 + + src/twisted/web/test/test_http.py | 215 +++++++++++++++++----- + 3 files changed, 223 insertions(+), 57 deletions(-) + create mode 100644 src/twisted/web/newsfragments/9770.bugfix + +diff --git a/src/twisted/web/http.py b/src/twisted/web/http.py +index fe88d33739..71188a8d50 100644 +--- a/src/twisted/web/http.py ++++ b/src/twisted/web/http.py +@@ -2170,6 +2170,51 @@ class HTTPChannel(basic.LineReceiver, policies.TimeoutMixin): + self.allContentReceived() + self._dataBuffer.append(data) + ++ def _maybeChooseTransferDecoder(self, header, data): ++ """ ++ If the provided header is C{content-length} or ++ C{transfer-encoding}, choose the appropriate decoder if any. ++ ++ Returns L{True} if the request can proceed and L{False} if not. ++ """ ++ ++ def fail(): ++ self._respondToBadRequestAndDisconnect() ++ self.length = None ++ ++ # Can this header determine the length? ++ if header == b'content-length': ++ try: ++ length = int(data) ++ except ValueError: ++ fail() ++ return False ++ newTransferDecoder = _IdentityTransferDecoder( ++ length, self.requests[-1].handleContentChunk, self._finishRequestBody) ++ elif header == b'transfer-encoding': ++ # XXX Rather poorly tested code block, apparently only exercised by ++ # test_chunkedEncoding ++ if data.lower() == b'chunked': ++ length = None ++ newTransferDecoder = _ChunkedTransferDecoder( ++ self.requests[-1].handleContentChunk, self._finishRequestBody) ++ elif data.lower() == b'identity': ++ return True ++ else: ++ fail() ++ return False ++ else: ++ # It's not a length related header, so exit ++ return True ++ ++ if self._transferDecoder is not None: ++ fail() ++ return False ++ else: ++ self.length = length ++ self._transferDecoder = newTransferDecoder ++ return True ++ + + def headerReceived(self, line): + """ +@@ -2191,21 +2236,10 @@ class HTTPChannel(basic.LineReceiver, policies.TimeoutMixin): + + header = header.lower() + data = data.strip() +- if header == b'content-length': +- try: +- self.length = int(data) +- except ValueError: +- self._respondToBadRequestAndDisconnect() +- self.length = None +- return False +- self._transferDecoder = _IdentityTransferDecoder( +- self.length, self.requests[-1].handleContentChunk, self._finishRequestBody) +- elif header == b'transfer-encoding' and data.lower() == b'chunked': +- # XXX Rather poorly tested code block, apparently only exercised by +- # test_chunkedEncoding +- self.length = None +- self._transferDecoder = _ChunkedTransferDecoder( +- self.requests[-1].handleContentChunk, self._finishRequestBody) ++ ++ if not self._maybeChooseTransferDecoder(header, data): ++ return False ++ + reqHeaders = self.requests[-1].requestHeaders + values = reqHeaders.getRawHeaders(header) + if values is not None: +diff --git a/src/twisted/web/newsfragments/9770.bugfix b/src/twisted/web/newsfragments/9770.bugfix +new file mode 100644 +index 0000000000..4f1be97de8 +--- /dev/null ++++ b/src/twisted/web/newsfragments/9770.bugfix +@@ -0,0 +1 @@ ++Fix several request smuggling attacks: requests with multiple Content-Length headers were allowed (thanks to Jake Miller from Bishop Fox and ZeddYu Lu) and now fail with a 400; requests with a Content-Length header and a Transfer-Encoding header honored the first header (thanks to Jake Miller from Bishop Fox) and now fail with a 400; requests whose Transfer-Encoding header had a value other than "chunked" and "identity" (thanks to ZeddYu Lu) were allowed and now fail a 400. +\ No newline at end of file +diff --git a/src/twisted/web/test/test_http.py b/src/twisted/web/test/test_http.py +index 6001d1e40d..8f2c1bac21 100644 +--- a/src/twisted/web/test/test_http.py ++++ b/src/twisted/web/test/test_http.py +@@ -1441,7 +1441,8 @@ class ParsingTests(unittest.TestCase): + """ + Execute a web request based on plain text content. + +- @param httpRequest: Content for the request which is processed. ++ @param httpRequest: Content for the request which is processed. Each ++ L{"\n"} will be replaced with L{"\r\n"}. + @type httpRequest: C{bytes} + + @param requestFactory: 2-argument callable returning a Request. +@@ -1480,6 +1481,32 @@ class ParsingTests(unittest.TestCase): + return channel + + ++ def assertRequestRejected(self, requestLines): ++ """ ++ Execute a HTTP request and assert that it is rejected with a 400 Bad ++ Response and disconnection. ++ ++ @param requestLines: Plain text lines of the request. These lines will ++ be joined with newlines to form the HTTP request that is processed. ++ @type requestLines: C{list} of C{bytes} ++ """ ++ httpRequest = b"\n".join(requestLines) ++ processed = [] ++ ++ class MyRequest(http.Request): ++ def process(self): ++ processed.append(self) ++ self.finish() ++ ++ channel = self.runRequest(httpRequest, MyRequest, success=False) ++ self.assertEqual( ++ channel.transport.value(), ++ b"HTTP/1.1 400 Bad Request\r\n\r\n", ++ ) ++ self.assertTrue(channel.transport.disconnecting) ++ self.assertEqual(processed, []) ++ ++ + def test_invalidNonAsciiMethod(self): + """ + When client sends invalid HTTP method containing +@@ -1603,45 +1630,24 @@ class ParsingTests(unittest.TestCase): + + def test_tooManyHeaders(self): + """ +- L{HTTPChannel} enforces a limit of C{HTTPChannel.maxHeaders} on the ++ C{HTTPChannel} enforces a limit of C{HTTPChannel.maxHeaders} on the + number of headers received per request. + """ +- processed = [] +- class MyRequest(http.Request): +- def process(self): +- processed.append(self) +- + requestLines = [b"GET / HTTP/1.0"] + for i in range(http.HTTPChannel.maxHeaders + 2): + requestLines.append(networkString("%s: foo" % (i,))) + requestLines.extend([b"", b""]) + +- channel = self.runRequest(b"\n".join(requestLines), MyRequest, 0) +- self.assertEqual(processed, []) +- self.assertEqual( +- channel.transport.value(), +- b"HTTP/1.1 400 Bad Request\r\n\r\n") ++ self.assertRequestRejected(requestLines) + + + def test_invalidContentLengthHeader(self): + """ +- If a Content-Length header with a non-integer value is received, a 400 +- (Bad Request) response is sent to the client and the connection is +- closed. ++ If a I{Content-Length} header with a non-integer value is received, ++ a 400 (Bad Request) response is sent to the client and the connection ++ is closed. + """ +- processed = [] +- class MyRequest(http.Request): +- def process(self): +- processed.append(self) +- self.finish() +- +- requestLines = [b"GET / HTTP/1.0", b"Content-Length: x", b"", b""] +- channel = self.runRequest(b"\n".join(requestLines), MyRequest, 0) +- self.assertEqual( +- channel.transport.value(), +- b"HTTP/1.1 400 Bad Request\r\n\r\n") +- self.assertTrue(channel.transport.disconnecting) +- self.assertEqual(processed, []) ++ self.assertRequestRejected([b"GET / HTTP/1.0", b"Content-Length: x", b"", b""]) + + + def test_invalidHeaderNoColon(self): +@@ -1649,24 +1655,12 @@ class ParsingTests(unittest.TestCase): + If a header without colon is received a 400 (Bad Request) response + is sent to the client and the connection is closed. + """ +- processed = [] +- class MyRequest(http.Request): +- def process(self): +- processed.append(self) +- self.finish() +- +- requestLines = [b"GET / HTTP/1.0", b"HeaderName ", b"", b""] +- channel = self.runRequest(b"\n".join(requestLines), MyRequest, 0) +- self.assertEqual( +- channel.transport.value(), +- b"HTTP/1.1 400 Bad Request\r\n\r\n") +- self.assertTrue(channel.transport.disconnecting) +- self.assertEqual(processed, []) ++ self.assertRequestRejected([b"GET / HTTP/1.0", b"HeaderName ", b"", b""]) + + + def test_headerLimitPerRequest(self): + """ +- L{HTTPChannel} enforces the limit of C{HTTPChannel.maxHeaders} per ++ C{HTTPChannel} enforces the limit of C{HTTPChannel.maxHeaders} per + request so that headers received in an earlier request do not count + towards the limit when processing a later request. + """ +@@ -2152,6 +2146,143 @@ Hello, + self.flushLoggedErrors(AttributeError) + + ++ def assertDisconnectingBadRequest(self, request): ++ """ ++ Assert that the given request bytes fail with a 400 bad ++ request without calling L{Request.process}. ++ ++ @param request: A raw HTTP request ++ @type request: L{bytes} ++ """ ++ class FailedRequest(http.Request): ++ processed = False ++ def process(self): ++ FailedRequest.processed = True ++ ++ channel = self.runRequest(request, FailedRequest, success=False) ++ self.assertFalse(FailedRequest.processed, "Request.process called") ++ self.assertEqual( ++ channel.transport.value(), ++ b"HTTP/1.1 400 Bad Request\r\n\r\n") ++ self.assertTrue(channel.transport.disconnecting) ++ ++ ++ def test_duplicateContentLengths(self): ++ """ ++ A request which includes multiple C{content-length} headers ++ fails with a 400 response without calling L{Request.process}. ++ """ ++ self.assertRequestRejected([ ++ b'GET /a HTTP/1.1', ++ b'Content-Length: 56', ++ b'Content-Length: 0', ++ b'Host: host.invalid', ++ b'', ++ b'', ++ ]) ++ ++ ++ def test_duplicateContentLengthsWithPipelinedRequests(self): ++ """ ++ Two pipelined requests, the first of which includes multiple ++ C{content-length} headers, trigger a 400 response without ++ calling L{Request.process}. ++ """ ++ self.assertRequestRejected([ ++ b'GET /a HTTP/1.1', ++ b'Content-Length: 56', ++ b'Content-Length: 0', ++ b'Host: host.invalid', ++ b'', ++ b'', ++ b'GET /a HTTP/1.1', ++ b'Host: host.invalid', ++ b'', ++ b'', ++ ]) ++ ++ ++ def test_contentLengthAndTransferEncoding(self): ++ """ ++ A request that includes both C{content-length} and ++ C{transfer-encoding} headers fails with a 400 response without ++ calling L{Request.process}. ++ """ ++ self.assertRequestRejected([ ++ b'GET /a HTTP/1.1', ++ b'Transfer-Encoding: chunked', ++ b'Content-Length: 0', ++ b'Host: host.invalid', ++ b'', ++ b'', ++ ]) ++ ++ ++ def test_contentLengthAndTransferEncodingWithPipelinedRequests(self): ++ """ ++ Two pipelined requests, the first of which includes both ++ C{content-length} and C{transfer-encoding} headers, triggers a ++ 400 response without calling L{Request.process}. ++ """ ++ self.assertRequestRejected([ ++ b'GET /a HTTP/1.1', ++ b'Transfer-Encoding: chunked', ++ b'Content-Length: 0', ++ b'Host: host.invalid', ++ b'', ++ b'', ++ b'GET /a HTTP/1.1', ++ b'Host: host.invalid', ++ b'', ++ b'', ++ ]) ++ ++ ++ def test_unknownTransferEncoding(self): ++ """ ++ A request whose C{transfer-encoding} header includes a value ++ other than C{chunked} or C{identity} fails with a 400 response ++ without calling L{Request.process}. ++ """ ++ self.assertRequestRejected([ ++ b'GET /a HTTP/1.1', ++ b'Transfer-Encoding: unknown', ++ b'Host: host.invalid', ++ b'', ++ b'', ++ ]) ++ ++ ++ def test_transferEncodingIdentity(self): ++ """ ++ A request with a valid C{content-length} and a ++ C{transfer-encoding} whose value is C{identity} succeeds. ++ """ ++ body = [] ++ ++ class SuccessfulRequest(http.Request): ++ processed = False ++ def process(self): ++ body.append(self.content.read()) ++ self.setHeader(b'content-length', b'0') ++ self.finish() ++ ++ request = b'''\ ++GET / HTTP/1.1 ++Host: host.invalid ++Content-Length: 2 ++Transfer-Encoding: identity ++ ++ok ++''' ++ channel = self.runRequest(request, SuccessfulRequest, False) ++ self.assertEqual(body, [b'ok']) ++ self.assertEqual( ++ channel.transport.value(), ++ b'HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n', ++ ) ++ ++ + + class QueryArgumentsTests(unittest.TestCase): + def testParseqs(self): +-- +2.39.2 + diff --git a/base/python-twisted/0003-Fix-CVE-2022-21716.patch b/base/python-twisted/0003-Fix-CVE-2022-21716.patch new file mode 100644 index 0000000..5e6657a --- /dev/null +++ b/base/python-twisted/0003-Fix-CVE-2022-21716.patch @@ -0,0 +1,86 @@ +From 2552b2e8c9f73b5cdef8842e4e3701bac19c12c6 Mon Sep 17 00:00:00 2001 +From: Adi Roiban +Date: Mon, 24 Jan 2022 19:09:04 +0000 +Subject: [PATCH 3/4] Fix CVE-2022-21716 + +Initial fix for Twisted version string DoS. + +(cherry picked from commit de90dfe1519e996dd150de751c670f8e03daa089) + +Update after review. + +(cherry picked from commit 9b98116372f5d211ddb9f68916d4ae73bf3c8da7) + +Fix typo. + +(cherry picked from commit a4523b444760f07e609636264a61a2a07ca0bde5) +--- + src/twisted/conch/ssh/transport.py | 9 +++++++++ + src/twisted/conch/test/test_transport.py | 21 +++++++++++++++++++++ + src/twisted/newsfragments/10284.bugfix | 2 ++ + 3 files changed, 32 insertions(+) + create mode 100644 src/twisted/newsfragments/10284.bugfix + +diff --git a/src/twisted/conch/ssh/transport.py b/src/twisted/conch/ssh/transport.py +index bd76b0a845..6d02df52dd 100644 +--- a/src/twisted/conch/ssh/transport.py ++++ b/src/twisted/conch/ssh/transport.py +@@ -677,6 +677,15 @@ class SSHTransportBase(protocol.Protocol): + """ + self.buf = self.buf + data + if not self.gotVersion: ++ ++ if len(self.buf) > 4096: ++ self.sendDisconnect( ++ DISCONNECT_CONNECTION_LOST, ++ b"Peer version string longer than 4KB. " ++ b"Preventing a denial of service attack.", ++ ) ++ return ++ + if self.buf.find(b'\n', self.buf.find(b'SSH-')) == -1: + return + +diff --git a/src/twisted/conch/test/test_transport.py b/src/twisted/conch/test/test_transport.py +index 98a3515a75..449dd3f8df 100644 +--- a/src/twisted/conch/test/test_transport.py ++++ b/src/twisted/conch/test/test_transport.py +@@ -522,6 +522,27 @@ class BaseSSHTransportTests(BaseSSHTransportBaseCase, TransportTestCase): + r')*$') + self.assertRegex(softwareVersion, softwareVersionRegex) + ++ def test_dataReceiveVersionNotSentMemoryDOS(self): ++ """ ++ When the peer is not sending its SSH version but keeps sending data, ++ the connection is disconnected after 4KB to prevent buffering too ++ much and running our of memory. ++ """ ++ sut = MockTransportBase() ++ sut.makeConnection(self.transport) ++ ++ # Data can be received over multiple chunks. ++ sut.dataReceived(b"SSH-2-Server-Identifier") ++ sut.dataReceived(b"1234567890" * 406) ++ sut.dataReceived(b"1235678") ++ self.assertFalse(self.transport.disconnecting) ++ ++ # Here we are going over the limit. ++ sut.dataReceived(b"1234567") ++ # Once a lot of data is received without an SSH version string, ++ # the transport is disconnected. ++ self.assertTrue(self.transport.disconnecting) ++ self.assertIn(b"Preventing a denial of service attack", self.transport.value()) + + def test_sendPacketPlain(self): + """ +diff --git a/src/twisted/newsfragments/10284.bugfix b/src/twisted/newsfragments/10284.bugfix +new file mode 100644 +index 0000000000..b2316f1e68 +--- /dev/null ++++ b/src/twisted/newsfragments/10284.bugfix +@@ -0,0 +1,2 @@ ++twisted.conch.ssh.transport.SSHTransportBase now disconnects the remote peer if the ++SSH version string is not sent in the first 4096 bytes. +-- +2.39.2 + diff --git a/base/python-twisted/0004-Fix-CVE-2022-24801.patch b/base/python-twisted/0004-Fix-CVE-2022-24801.patch new file mode 100644 index 0000000..607b626 --- /dev/null +++ b/base/python-twisted/0004-Fix-CVE-2022-24801.patch @@ -0,0 +1,437 @@ +From c26f9865d02ac6cf43a560a25a6201439c33640d Mon Sep 17 00:00:00 2001 +From: Tom Most +Date: Sat, 5 Mar 2022 23:26:55 -0800 +Subject: [PATCH 4/4] Fix CVE-2022-24801 + +Some tests for GHSA-c2jg-hw38-jrqq + +(cherry picked from commit 22b067793cbcd0fb5dee04cfd9115fa85a7ca110) + +Replace obs-fold with a single space + +(cherry picked from commit 79ee8c564ca0d4c2910c8859e0a6014d2dc40005) + +Strip only spaces and tabs from header values + +(cherry picked from commit c3a4e1d015740c1d87a3ec7d57570257e75b0062) + +Reject non-digit Content-Length + +(cherry picked from commit 8ebfa8f6577431226e109ff98ba48f5152a2c416) + +Test for malformed chunk size and extensions + +(cherry picked from commit f22d0d9c889822adb7eaf84b42a20ff5f7c4d421) + +Reject malformed chunk sizes + +(cherry picked from commit 0275152f147506c82868ff1dabd9bf655ab67946) + +We should deprecate http.fromChunk + +(cherry picked from commit 2a5763d5b168372abb591c0eb6323ed4dfe8a4fc) + +Correct chunk extension byte validation + +Go back to the RFC to figure out the correct allowed ranges. + +(cherry picked from commit fa9caa54d63399b4ccdfbf0429ba1b504ccc7c89) + +Address review feedback + +(cherry picked from commit 2bbd6c89110f0d44d2bb109c14d787f65bca9df8) +--- + src/twisted/web/http.py | 83 ++++++++++++- + src/twisted/web/test/test_http.py | 193 +++++++++++++++++++++++++++++- + 2 files changed, 268 insertions(+), 8 deletions(-) + +diff --git a/src/twisted/web/http.py b/src/twisted/web/http.py +index 71188a8d50..e988601789 100644 +--- a/src/twisted/web/http.py ++++ b/src/twisted/web/http.py +@@ -340,10 +340,39 @@ def toChunk(data): + + + ++def _ishexdigits(b): ++ """ ++ Is the string case-insensitively hexidecimal? ++ ++ It must be composed of one or more characters in the ranges a-f, A-F ++ and 0-9. ++ """ ++ for c in b: ++ if c not in b"0123456789abcdefABCDEF": ++ return False ++ return b != b"" ++ ++ ++def _hexint(b): ++ """ ++ Decode a hexadecimal integer. ++ ++ Unlike L{int(b, 16)}, this raises L{ValueError} when the integer has ++ a prefix like C{b'0x'}, C{b'+'}, or C{b'-'}, which is desirable when ++ parsing network protocols. ++ """ ++ if not _ishexdigits(b): ++ raise ValueError(b) ++ return int(b, 16) ++ ++ + def fromChunk(data): + """ + Convert chunk to string. + ++ Note that this function is not specification compliant: it doesn't handle ++ chunk extensions. ++ + @type data: C{bytes} + + @return: tuple of (result, remaining) - both C{bytes}. +@@ -352,7 +381,7 @@ def fromChunk(data): + byte string. + """ + prefix, rest = data.split(b'\r\n', 1) +- length = int(prefix, 16) ++ length = _hexint(prefix) + if length < 0: + raise ValueError("Chunk length must be >= 0, not %d" % (length,)) + if rest[length:length + 2] != b'\r\n': +@@ -1774,6 +1803,46 @@ class _IdentityTransferDecoder(object): + raise _DataLoss() + + ++_chunkExtChars = ( ++ b"\t !\"#$%&'()*+,-./0123456789:;<=>?@" ++ b"ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`" ++ b"abcdefghijklmnopqrstuvwxyz{|}~" ++ b"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" ++ b"\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" ++ b"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" ++ b"\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" ++ b"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" ++ b"\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" ++ b"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" ++ b"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" ++) ++""" ++Characters that are valid in a chunk extension. ++ ++See RFC 7230 section 4.1.1:: ++ ++ chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-val ] ) ++ ++ chunk-ext-name = token ++ chunk-ext-val = token / quoted-string ++ ++And section 3.2.6:: ++ ++ token = 1*tchar ++ ++ tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" ++ / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" ++ / DIGIT / ALPHA ++ ; any VCHAR, except delimiters ++ ++ quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE ++ qdtext = HTAB / SP /%x21 / %x23-5B / %x5D-7E / obs-text ++ obs-text = %x80-FF ++ ++We don't check if chunk extensions are well-formed beyond validating that they ++don't contain characters outside this range. ++""" ++ + + class _ChunkedTransferDecoder(object): + """ +@@ -1826,10 +1895,14 @@ class _ChunkedTransferDecoder(object): + line, rest = data.split(b'\r\n', 1) + parts = line.split(b';') + try: +- self.length = int(parts[0], 16) ++ self.length = _hexint(parts[0]) + except ValueError: + raise _MalformedChunkedDataError( + "Chunk-size must be an integer.") ++ if len(parts) > 1 and parts[1].translate(None, _chunkExtChars) != b"": ++ raise _MalformedChunkedDataError( ++ "Invalid characters in chunk extensions: %r." % parts[1] ++ ) + if self.length == 0: + self.state = 'TRAILER' + else: +@@ -2156,7 +2229,7 @@ class HTTPChannel(basic.LineReceiver, policies.TimeoutMixin): + self.setRawMode() + elif line[0] in b' \t': + # Continuation of a multi line header. +- self.__header = self.__header + b'\n' + line ++ self.__header += b" " + line.lstrip(b" \t") + # Regular header line. + # Processing of header line is delayed to allow accumulating multi + # line headers. +@@ -2184,6 +2257,8 @@ class HTTPChannel(basic.LineReceiver, policies.TimeoutMixin): + + # Can this header determine the length? + if header == b'content-length': ++ if not data.isdigit(): ++ return fail() + try: + length = int(data) + except ValueError: +@@ -2235,7 +2310,7 @@ class HTTPChannel(basic.LineReceiver, policies.TimeoutMixin): + return False + + header = header.lower() +- data = data.strip() ++ data = data.strip(b" \t") + + if not self._maybeChooseTransferDecoder(header, data): + return False +diff --git a/src/twisted/web/test/test_http.py b/src/twisted/web/test/test_http.py +index 8f2c1bac21..d6f1fc0673 100644 +--- a/src/twisted/web/test/test_http.py ++++ b/src/twisted/web/test/test_http.py +@@ -1300,6 +1300,43 @@ class ChunkedTransferEncodingTests(unittest.TestCase): + p.dataReceived(b'3; x-foo=bar\r\nabc\r\n') + self.assertEqual(L, [b'abc']) + ++ def test_extensionsMalformed(self): ++ """ ++ L{_ChunkedTransferDecoder.dataReceived} raises ++ L{_MalformedChunkedDataError} when the chunk extension fields contain ++ invalid characters. ++ ++ This is a potential request smuggling vector: see GHSA-c2jg-hw38-jrqq. ++ """ ++ invalidControl = ( ++ b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\n\x0b\x0c\r\x0e\x0f" ++ b"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" ++ ) ++ invalidDelimiter = b"\\" ++ invalidDel = b"\x7f" ++ for b in invalidControl + invalidDelimiter + invalidDel: ++ data = b"3; " + bytes((b,)) + b"\r\nabc\r\n" ++ p = http._ChunkedTransferDecoder( ++ lambda b: None, # pragma: nocov ++ lambda b: None, # pragma: nocov ++ ) ++ self.assertRaises(http._MalformedChunkedDataError, p.dataReceived, data) ++ ++ def test_malformedChunkSizeHex(self): ++ """ ++ L{_ChunkedTransferDecoder.dataReceived} raises ++ L{_MalformedChunkedDataError} when the chunk size is prefixed with ++ "0x", as if it were a Python integer literal. ++ ++ This is a potential request smuggling vector: see GHSA-c2jg-hw38-jrqq. ++ """ ++ p = http._ChunkedTransferDecoder( ++ lambda b: None, # pragma: nocov ++ lambda b: None, # pragma: nocov ++ ) ++ self.assertRaises( ++ http._MalformedChunkedDataError, p.dataReceived, b"0x3\r\nabc\r\n" ++ ) + + def test_finish(self): + """ +@@ -1389,6 +1426,8 @@ class ChunkingTests(unittest.TestCase, ResponseTestMixin): + chunked = b''.join(http.toChunk(s)) + self.assertEqual((s, b''), http.fromChunk(chunked)) + self.assertRaises(ValueError, http.fromChunk, b'-5\r\nmalformed!\r\n') ++ self.assertRaises(ValueError, http.fromChunk, b"0xa\r\nmalformed!\r\n") ++ self.assertRaises(ValueError, http.fromChunk, b"0XA\r\nmalformed!\r\n") + + def testConcatenatedChunks(self): + chunked = b''.join([b''.join(http.toChunk(t)) for t in self.strings]) +@@ -1579,7 +1618,12 @@ class ParsingTests(unittest.TestCase): + Line folded headers are handled by L{HTTPChannel} by replacing each + fold with a single space by the time they are made available to the + L{Request}. Any leading whitespace in the folded lines of the header +- value is preserved. ++ value is replaced with a single space, per: ++ ++ A server that receives an obs-fold in a request message ... MUST ++ ... replace each received obs-fold with one or more SP octets prior ++ to interpreting the field value or forwarding the message ++ downstream. + + See RFC 7230 section 3.2.4. + """ +@@ -1616,17 +1660,66 @@ class ParsingTests(unittest.TestCase): + ) + self.assertEqual( + request.requestHeaders.getRawHeaders(b"space"), +- [b"space space"], ++ [b"space space"], + ) + self.assertEqual( + request.requestHeaders.getRawHeaders(b"spaces"), +- [b"spaces spaces spaces"], ++ [b"spaces spaces spaces"], + ) + self.assertEqual( + request.requestHeaders.getRawHeaders(b"tab"), +- [b"t \ta \tb"], ++ [b"t a b"], + ) + ++ def test_headerStripWhitespace(self): ++ """ ++ Leading and trailing space and tab characters are stripped from ++ headers. Other forms of whitespace are preserved. ++ ++ See RFC 7230 section 3.2.3 and 3.2.4. ++ """ ++ processed = [] ++ ++ class MyRequest(http.Request): ++ def process(self): ++ processed.append(self) ++ self.finish() ++ ++ requestLines = [ ++ b"GET / HTTP/1.0", ++ b"spaces: spaces were stripped ", ++ b"tabs: \t\ttabs were stripped\t\t", ++ b"spaces-and-tabs: \t \t spaces and tabs were stripped\t \t", ++ b"line-tab: \v vertical tab was preserved\v\t", ++ b"form-feed: \f form feed was preserved \f ", ++ b"", ++ b"", ++ ] ++ ++ self.runRequest(b"\n".join(requestLines), MyRequest, 0) ++ [request] = processed ++ # All leading and trailing whitespace is stripped from the ++ # header-value. ++ self.assertEqual( ++ request.requestHeaders.getRawHeaders(b"spaces"), ++ [b"spaces were stripped"], ++ ) ++ self.assertEqual( ++ request.requestHeaders.getRawHeaders(b"tabs"), ++ [b"tabs were stripped"], ++ ) ++ self.assertEqual( ++ request.requestHeaders.getRawHeaders(b"spaces-and-tabs"), ++ [b"spaces and tabs were stripped"], ++ ) ++ self.assertEqual( ++ request.requestHeaders.getRawHeaders(b"line-tab"), ++ [b"\v vertical tab was preserved\v"], ++ ) ++ self.assertEqual( ++ request.requestHeaders.getRawHeaders(b"form-feed"), ++ [b"\f form feed was preserved \f"], ++ ) + + def test_tooManyHeaders(self): + """ +@@ -2182,6 +2275,58 @@ Hello, + ]) + + ++ def test_contentLengthMalformed(self): ++ """ ++ A request with a non-integer C{Content-Length} header fails with a 400 ++ response without calling L{Request.process}. ++ """ ++ self.assertRequestRejected( ++ [ ++ b"GET /a HTTP/1.1", ++ b"Content-Length: MORE THAN NINE THOUSAND!", ++ b"Host: host.invalid", ++ b"", ++ b"", ++ b"x" * 9001, ++ ] ++ ) ++ ++ def test_contentLengthTooPositive(self): ++ """ ++ A request with a C{Content-Length} header that begins with a L{+} fails ++ with a 400 response without calling L{Request.process}. ++ ++ This is a potential request smuggling vector: see GHSA-c2jg-hw38-jrqq. ++ """ ++ self.assertRequestRejected( ++ [ ++ b"GET /a HTTP/1.1", ++ b"Content-Length: +100", ++ b"Host: host.invalid", ++ b"", ++ b"", ++ b"x" * 100, ++ ] ++ ) ++ ++ def test_contentLengthNegative(self): ++ """ ++ A request with a C{Content-Length} header that is negative fails with ++ a 400 response without calling L{Request.process}. ++ ++ This is a potential request smuggling vector: see GHSA-c2jg-hw38-jrqq. ++ """ ++ self.assertRequestRejected( ++ [ ++ b"GET /a HTTP/1.1", ++ b"Content-Length: -100", ++ b"Host: host.invalid", ++ b"", ++ b"", ++ b"x" * 200, ++ ] ++ ) ++ + def test_duplicateContentLengthsWithPipelinedRequests(self): + """ + Two pipelined requests, the first of which includes multiple +@@ -4140,3 +4285,43 @@ class HTTPClientSanitizationTests(unittest.SynchronousTestCase): + transport.value().splitlines(), + [b": ".join([sanitizedBytes, sanitizedBytes])] + ) ++ ++ ++class HexHelperTests(unittest.SynchronousTestCase): ++ """ ++ Test the L{http._hexint} and L{http._ishexdigits} helper functions. ++ """ ++ ++ badStrings = (b"", b"0x1234", b"feds", b"-123" b"+123") ++ ++ def test_isHex(self): ++ """ ++ L{_ishexdigits()} returns L{True} for nonempy bytestrings containing ++ hexadecimal digits. ++ """ ++ for s in (b"10", b"abcdef", b"AB1234", b"fed", b"123467890"): ++ self.assertIs(True, http._ishexdigits(s)) ++ ++ def test_decodes(self): ++ """ ++ L{_hexint()} returns the integer equivalent of the input. ++ """ ++ self.assertEqual(10, http._hexint(b"a")) ++ self.assertEqual(0x10, http._hexint(b"10")) ++ self.assertEqual(0xABCD123, http._hexint(b"abCD123")) ++ ++ def test_isNotHex(self): ++ """ ++ L{_ishexdigits()} returns L{False} for bytestrings that don't contain ++ hexadecimal digits, including the empty string. ++ """ ++ for s in self.badStrings: ++ self.assertIs(False, http._ishexdigits(s)) ++ ++ def test_decodeNotHex(self): ++ """ ++ L{_hexint()} raises L{ValueError} for bytestrings that can't ++ be decoded. ++ """ ++ for s in self.badStrings: ++ self.assertRaises(ValueError, http._hexint, s) +-- +2.39.2 + diff --git a/base/python-twisted/python-twisted.spec b/base/python-twisted/python-twisted.spec new file mode 100644 index 0000000..e960de0 --- /dev/null +++ b/base/python-twisted/python-twisted.spec @@ -0,0 +1,428 @@ +%global pypi_name twisted + +%global common_description %{expand: +Twisted is a networking engine written in Python, supporting numerous protocols. +It contains a web server, numerous chat clients, chat servers, mail servers +and more.} + +Name: python-%{pypi_name} +Version: 19.10.0 +Release: 4%{?dist} +Summary: Twisted is a networking engine written in Python + +License: MIT +URL: http://twistedmatrix.com/ +Source0: %{pypi_source Twisted %{version} tar.bz2} +# Import gobject from gi.repository for Python 3 +# https://twistedmatrix.com/trac/ticket/9642 +Patch1: 0001-Import-gobject-from-gi.repository-in-Python-3.patch +# https://github.com/twisted/twisted/commit/d2f6dd9b3766509f40c980aac67ca8475da67c6f +# https://github.com/twisted/twisted/commit/4a7d22e490bb8ff836892cc99a1f54b85ccb0281 +Patch2: 0002-Fix-CVE-2020-10108-and-CVE-2020-10109.patch +# https://github.com/twisted/twisted/commit/de90dfe1519e996dd150de751c670f8e03daa089 +# https://github.com/twisted/twisted/commit/9b98116372f5d211ddb9f68916d4ae73bf3c8da7 +# https://github.com/twisted/twisted/commit/a4523b444760f07e609636264a61a2a07ca0bde5 +Patch3: 0003-Fix-CVE-2022-21716.patch +# https://github.com/twisted/twisted/commit/22b067793cbcd0fb5dee04cfd9115fa85a7ca110 +# https://github.com/twisted/twisted/commit/79ee8c564ca0d4c2910c8859e0a6014d2dc40005 +# https://github.com/twisted/twisted/commit/c3a4e1d015740c1d87a3ec7d57570257e75b0062 +# https://github.com/twisted/twisted/commit/8ebfa8f6577431226e109ff98ba48f5152a2c416 +# https://github.com/twisted/twisted/commit/f22d0d9c889822adb7eaf84b42a20ff5f7c4d421 +# https://github.com/twisted/twisted/commit/0275152f147506c82868ff1dabd9bf655ab67946 +# https://github.com/twisted/twisted/commit/2a5763d5b168372abb591c0eb6323ed4dfe8a4fc +# https://github.com/twisted/twisted/commit/fa9caa54d63399b4ccdfbf0429ba1b504ccc7c89 +# https://github.com/twisted/twisted/commit/2bbd6c89110f0d44d2bb109c14d787f65bca9df8 +Patch4: 0004-Fix-CVE-2022-24801.patch + +%description +%{common_description} + +%package -n python%{python3_pkgversion}-%{pypi_name} +Summary: %{summary} +%{?python_provide:%python_provide python%{python3_pkgversion}-%{pypi_name}} + +BuildRequires: gcc +BuildRequires: python%{python3_pkgversion}-devel >= 3.3 +BuildRequires: python%{python3_pkgversion}dist(appdirs) >= 1.4.0 +BuildRequires: python%{python3_pkgversion}dist(automat) >= 0.3.0 +BuildRequires: python%{python3_pkgversion}dist(attrs) >= 17.4.0 +BuildRequires: python%{python3_pkgversion}dist(constantly) >= 15.1 +BuildRequires: python%{python3_pkgversion}dist(cryptography) >= 2.3 +BuildRequires: (python%{python3_pkgversion}dist(h2) >= 3.0 with python%{python3_pkgversion}dist(h2) < 4.0) +BuildRequires: python%{python3_pkgversion}dist(hyperlink) >= 17.1.1 +BuildRequires: python%{python3_pkgversion}dist(idna) >= 2.5 +BuildRequires: python%{python3_pkgversion}dist(incremental) >= 16.10.1 +BuildRequires: (python%{python3_pkgversion}dist(priority) >= 1.1.0 with python%{python3_pkgversion}dist(priority) < 2.0) +BuildRequires: python%{python3_pkgversion}dist(pyasn1) +BuildRequires: python%{python3_pkgversion}dist(pyopenssl) >= 16.0.0 +BuildRequires: python%{python3_pkgversion}dist(pyserial) >= 3.0 +BuildRequires: python%{python3_pkgversion}dist(service-identity) >= 18.1.0 +BuildRequires: python%{python3_pkgversion}dist(setuptools) +BuildRequires: python3dist(sphinx) >= 1.3.1 +BuildRequires: python%{python3_pkgversion}dist(zope.interface) >= 4.4.2 +BuildRequires: python%{python3_pkgversion}dist(pyhamcrest) >= 1.9.0 + +Recommends: python%{python3_pkgversion}dist(service-identity) >= 18.1.0 + +%description -n python%{python3_pkgversion}-%{pypi_name} +%{common_description} + +%prep +%autosetup -p1 -n Twisted-%{version} + +%build +find -name '*.pyx' -exec cython {} \; +%py3_build + +# generate html docs +PYTHONPATH=${PWD}/src/ sphinx-build-3 docs html +# remove the sphinx-build leftovers +rm -rf html/.{doctrees,buildinfo} + +%install +# no-manual-page-for-binary +mkdir -p %{buildroot}%{_mandir}/man1/ +for s in conch core mail; do +cp -a docs/$s/man/*.1 %{buildroot}%{_mandir}/man1/ +done + +%py3_install + +# Packages that install arch-independent twisted plugins install here. +# https://bugzilla.redhat.com/show_bug.cgi?id=1252140 +mkdir -p %{buildroot}%{python3_sitelib}/twisted/plugins + +# Move and symlink python3 scripts +# no-manual-page-for-binary: man page is trial and twistd +mv %{buildroot}%{_bindir}/trial %{buildroot}%{_bindir}/trial-%{python3_version} +ln -s ./trial-%{python3_version} %{buildroot}%{_bindir}/trial-3 +ln -s ./trial-%{python3_version} %{buildroot}%{_bindir}/trial + +mv %{buildroot}%{_bindir}/twistd %{buildroot}%{_bindir}/twistd-%{python3_version} +ln -s ./twistd-%{python3_version} %{buildroot}%{_bindir}/twistd-3 +ln -s ./twistd-%{python3_version} %{buildroot}%{_bindir}/twistd + +# non-executable-script +# pop3testserver.py: applies to py2.4 and that is the current default +# scripttest.py: is noop +chmod +x %{buildroot}%{python3_sitearch}/twisted/mail/test/pop3testserver.py +chmod +x %{buildroot}%{python3_sitearch}/twisted/trial/test/scripttest.py + +# ambiguous shebangs +pathfix.py -pn -i %{__python3} %{buildroot}%{python3_sitelib} %{buildroot}%{python3_sitearch} + + +%check +# can't get this to work within the buildroot yet due to multicast +# https://twistedmatrix.com/trac/ticket/7494 +PATH=%{buildroot}%{_bindir}:$PATH PYTHONPATH=%{buildroot}%{python3_sitearch} %{buildroot}%{_bindir}/trial twisted ||: + + +%files -n python%{python3_pkgversion}-twisted +%doc CONTRIBUTING NEWS.rst README.rst html +%license LICENSE +%{_bindir}/trial-3* +%{_bindir}/twistd-3* +%{python3_sitearch}/twisted +%{python3_sitearch}/Twisted-%{version}-py%{python3_version}.egg-info +%dir %{python3_sitelib}/twisted/ +%dir %{python3_sitelib}/twisted/plugins/ +%{_bindir}/cftp +%{_bindir}/ckeygen +%{_bindir}/conch +%{_bindir}/mailmail +%{_bindir}/pyhtmlizer +%{_bindir}/tkconch +%{_bindir}/trial +%{_bindir}/twist +%{_bindir}/twistd +%{_mandir}/man1/cftp.1* +%{_mandir}/man1/ckeygen.1* +%{_mandir}/man1/conch.1* +%{_mandir}/man1/mailmail.1* +%{_mandir}/man1/pyhtmlizer.1* +%{_mandir}/man1/tkconch.1* +%{_mandir}/man1/trial.1* +%{_mandir}/man1/twistd.1* + + +%changelog +* Wed Apr 12 2023 Carl George - 19.10.0-4 +- Backport fix for CVE-2022-24801, resolves: rhbz#2073116 + +* Mon Nov 28 17:45:05 CLT 2022 Diego Herrera - 19.10.0-3 +- Backported CVE-2022-21716 fix from upstream + +* Tue Mar 17 16:31:05 CET 2020 Robert-André Mauchin - 19.10.0-2 +- Security fix for CVE-2020-10108 (#1813439, #1813442) +- Security fix for CVE-2020-10109 (#1813447, #1813450) + +* Tue Mar 17 15:15:48 CET 2020 Robert-André Mauchin - 19.10.0-1 +- Update to 19.10.0 +- Revert removal of %%{python3_sitelib}/twisted/plugins/ + +* Sun Oct 13 23:35:33 CEST 2019 Robert-André Mauchin - 19.7.0-2 +- Drop Python 2 support (#1761204) + +* Wed Jul 24 2019 Stephen Smoogen - 19.2.1-1.1 +- Cut down python-cryptography to the version shipped in RHEL and see if that works. + +* Mon Jun 24 2019 Troy Dawson - 1.0.2-9.1 +- Make python2 optional +- Do not build python2 for RHEL8 + +* Sun Jun 09 18:40:31 CEST 2019 Robert-André Mauchin - 19.2.1-1 +- Release 19.2.1 + +* Wed May 22 18:26:29 CEST 2019 Robert-André Mauchin - 19.2.0-3 +- Add patch to import gobject from gi.repository for Python 3 +- Fix #1712748 + +* Tue May 14 16:00:42 CEST 2019 Robert-André Mauchin - 19.2.0-2 +- Add patch regenerating raiser.c to use with Python 3.8a4 +- Fix #11709817 + +* Wed Apr 10 17:38:50 CET 2019 Robert-André Mauchin - 19.2.0-1 +- Release 19.2.0 (#1698490) + +* Thu Mar 07 2019 Robert-André Mauchin - 18.9.0-1 +- Release 18.9.0 +- Run tests + +* Sat Feb 02 2019 Fedora Release Engineering - 18.7.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Oct 22 2018 Miro Hrončok - 18.7.0-3 +- Recommend pythonX-service-identity + +* Sat Jul 21 2018 Robert-André Mauchin - 18.7.0-2 +- Remove erroneous symlink to binaries + +* Sun Jul 15 2018 Robert-André Mauchin - 18.7.0-1 +- Update to 18.7.0 + +* Sat Jul 14 2018 Fedora Release Engineering - 18.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Jun 27 2018 Robert-André Mauchin - 18.4.0-1 +- Update to 18.4.0 +- Default binaries to Python 3 +- Drop old Obsoletes/Provides +- Refresh BR +- Remove useless macros +- Use python_enable_dependency_generator + +* Mon Jun 18 2018 Miro Hrončok - 16.4.1-11 +- Rebuilt for Python 3.7 + +* Wed May 23 2018 Miro Hrončok - 16.4.1-10 +- Fix ambiguous shebangs + +* Fri Apr 27 2018 Petr Viktorin - 16.4.1-9 +- No longer require python-crypto + +* Mon Mar 26 2018 Iryna Shcherbina - 16.4.1-8 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Fri Feb 09 2018 Fedora Release Engineering - 16.4.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Fri Sep 29 2017 Troy Dawson - 16.4.1-6 +- Cleanup spec file conditionals + +* Thu Aug 03 2017 Fedora Release Engineering - 16.4.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 16.4.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 16.4.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Dec 13 2016 Stratakis Charalampos - 16.4.1-2 +- rebuilt + +* Wed Oct 26 2016 Jonathan Steffan - 16.4.1-1 +- Update to 16.4.1 + +* Tue Jul 19 2016 Fedora Release Engineering - 16.3.0-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Fri Jul 8 2016 Jonathan Steffan - 16.3.0-1 +- Update to 16.3.0 +- mahole, tap2deb, tap2rpm are removed upstream + +* Sun Jun 26 2016 Jonathan Steffan - 16.2.0-2 +- Add rpmlint notes +- Fix unneeded py3 conditional for py2 script chmod + +* Sun Jun 26 2016 Jonathan Steffan - 16.2.0-1 +- Update to 16.2.0 +- Update upstream source location + +* Thu Jun 2 2016 Haïkel Guémar - 16.1.1-3 +- Drop tkinter dependency (only required for tkconch) +- Use python3 conditionals +- Move BR under the proper subpackage + +* Tue May 10 2016 Petr Viktorin - 16.1.1-2 +- Update to better conform to Python packaging guidelines + +* Thu May 05 2016 Julien Enselme - 16.1.1-1 +- Update to 16.1.1 (#1287381) + +* Thu Mar 10 2016 Julien Enselme - 15.5.0-2 +- Add python3 support + +* Thu Mar 10 2016 Julien Enselme - 15.5.0-1 +- Update to 15.5.0 (#1287381) +- Use new python macros +- Remove deprecated %%clean section + +* Thu Feb 04 2016 Fedora Release Engineering - 15.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Nov 27 2015 Tom Prince - 15.4.0-2 +- Add arch-independent plugin directory to package. (RHBZ#1252140) + +* Thu Oct 29 2015 Tom Prince - 15.4.0-1 +- Update to 15.4.0 +- Include test certificates. + +* Mon Jul 20 2015 Jonathan Steffan - 15.2.1-1 +- Update to 15.2.1 + +* Sat May 09 2015 Jonathan Steffan - 15.1.0-1 +- Update to 15.1.0 (RHBZ#1187921,RHBZ#1192707) +- Require python-service-identity (RHBZ#1119067) +- Obsolete python-twisted-core-doc (RHBZ#1187025) + +* Sat Nov 22 2014 Jonathan Steffan - 14.0.2-1 +- Update to 14.0.2 (RHBZ#1143002) + +* Sun Aug 17 2014 Fedora Release Engineering - 14.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Jonathan Steffan - 14.0.0-1 +- Update to 14.0.0 +- Ship Twisted as a fully featured package without subpackages on the advice + of upstream and to mirror what pypi provides +- Explictly build for python2 with new macros + +* Sat Jun 07 2014 Fedora Release Engineering - 12.2.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sun Aug 04 2013 Fedora Release Engineering - 12.2.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu Feb 14 2013 Fedora Release Engineering - 12.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Sep 03 2012 Julian Sikorski - 12.2.0-1 +- Updated to 12.2.0 + +* Sat Jul 21 2012 Fedora Release Engineering - 12.1.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sun Jun 17 2012 Julian Sikorski - 12.1.0-1 +- Updated to 12.1.0 + +* Sun Feb 12 2012 Julian Sikorski - 12.0.0-1 +- Updated to 12.0.0 + +* Sat Jan 07 2012 Julian Sikorski - 11.1.0-2 +- Rebuilt for gcc-4.7 + +* Fri Nov 18 2011 Julian Sikorski - 11.1.0-1 +- Updated to 11.1.0 +- Dropped obsolete Group, Buildroot, %%clean and %%defattr + +* Sat Apr 30 2011 Julian Sikorski - 11.0.0-1 +- Updated to 11.0.0 +- Added comment on how to obtain the PKG-INFO file + +* Wed Feb 09 2011 Fedora Release Engineering - 10.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sat Jan 15 2011 Julian Sikorski - 10.2.0-1 +- Updated to 10.2.0 + +* Mon Nov 08 2010 Julian Sikorski - 10.1.0-3 +- Use python_sitelib instead of python-sitearch +- The aforementioned macros are defined in Fedora 13 and above + +* Sun Nov 07 2010 Julian Sikorski - 10.1.0-2 +- Added egg-info file + +* Tue Sep 21 2010 Julian Sikorski - 10.1.0-1 +- Updated to 10.1.0 +- Switched to macros for versioned dependencies + +* Sun Jul 26 2009 Fedora Release Engineering - 8.2.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Feb 26 2009 Fedora Release Engineering - 8.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Dec 29 2008 Matthias Saou 8.2.0-1 +- Update to 8.2.0. +- Change back spec cosmetic details from Paul's to Thomas' preference. + +* Wed Jul 16 2008 Matthias Saou 8.1.0-2 +- Update to 8.1.0. +- Minor spec file cleanups. +- Merge back changes from Paul Howarth. + +* Wed May 21 2008 Thomas Vander Stichele +- 2.5.0-1 +- update to 2.5.0 release (only the umbrella package was missing) + +* Tue Jan 16 2007 Thomas Vander Stichele +- 2.4.0-3 +- list packages in README.fedora + +* Wed Jan 03 2007 Thomas Vander Stichele +- 2.4.0-2 +- add a README.fedora +- made noarch, since it doesn't actually install any python twisted/ module + code +- fixed provides/obsoletes + +* Wed Jun 07 2006 Thomas Vander Stichele +- 2.4.0-1 +- this is now a pure umbrella package + +* Mon Oct 10 2005 Jeff Pitman 2.1.0-1 +- upstream release + +* Tue Aug 23 2005 Jeff Pitman 2.0.1-1 +- upstream release + +* Mon Apr 04 2005 Jeff Pitman 2.0.0-2 +- add zsh support + +* Fri Mar 25 2005 Jeff Pitman 2.0.0-1 +- final release + +* Thu Mar 17 2005 Jeff Pitman 2.0.0-0.2.a3 +- dropped web2 + +* Wed Mar 16 2005 Jeff Pitman 2.0.0-0.1.a3 +- upstream release + +* Sat Mar 12 2005 Jeff Pitman 2.0.0-0.1.a2 +- new prerelease; FE versioning + +* Mon Feb 07 2005 Jeff Pitman 2.0.0a1-1 +- prep for split + +* Fri Aug 20 2004 Jeff Pitman 1.3.0-1 +- new version + +* Mon Apr 19 2004 Jeff Pitman 1.2.0-3 +- vaultize + +* Mon Apr 12 2004 Jeff Pitman 1.2.0-2 +- require pyOpenSSL, SOAPpy, openssh-clients, crypto, dia so trial can run + diff --git a/extras/KF6/misc/python-typogrify/python-typogrify.spec b/base/python-typogrify/python-typogrify.spec similarity index 100% rename from extras/KF6/misc/python-typogrify/python-typogrify.spec rename to base/python-typogrify/python-typogrify.spec diff --git a/extras/KF6/misc/lightly-qt5/lightly-qt5.spec b/extras/lightly-qt5/lightly-qt5.spec similarity index 100% rename from extras/KF6/misc/lightly-qt5/lightly-qt5.spec rename to extras/lightly-qt5/lightly-qt5.spec diff --git a/extras/KF6/misc/lightly-qt6/add-missing-files.patch b/extras/lightly-qt6/add-missing-files.patch similarity index 100% rename from extras/KF6/misc/lightly-qt6/add-missing-files.patch rename to extras/lightly-qt6/add-missing-files.patch diff --git a/extras/KF6/misc/lightly-qt6/lightly-qt6.spec b/extras/lightly-qt6/lightly-qt6.spec similarity index 100% rename from extras/KF6/misc/lightly-qt6/lightly-qt6.spec rename to extras/lightly-qt6/lightly-qt6.spec diff --git a/extras/mesa/0001-Revert-egl-add-automatic-zink-fallback-loading-betwe.patch b/extras/mesa/0001-Revert-egl-add-automatic-zink-fallback-loading-betwe.patch new file mode 100644 index 0000000..e6217ad --- /dev/null +++ b/extras/mesa/0001-Revert-egl-add-automatic-zink-fallback-loading-betwe.patch @@ -0,0 +1,40 @@ +From b673271710047acb1976002e4b84d06b7cefd3d7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= +Date: Wed, 17 Jan 2024 13:20:49 +0100 +Subject: [PATCH 1/2] Revert "egl: add automatic zink fallback loading between + hw and sw drivers" + +This reverts commit 8cd44b8843877a2f7d559d123eb3694841f16fdc. +--- + src/egl/main/eglapi.c | 15 ++++----------- + 1 file changed, 4 insertions(+), 11 deletions(-) + +diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c +index d50be23e871..b1a48668b76 100644 +--- a/src/egl/main/eglapi.c ++++ b/src/egl/main/eglapi.c +@@ -695,17 +695,10 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) + if (disp->Options.ForceSoftware) + RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); + else { +- bool success = false; +- if (!disp->Options.Zink && !getenv("GALLIUM_DRIVER")) { +- disp->Options.Zink = EGL_TRUE; +- success = _eglDriver.Initialize(disp); +- } +- if (!success) { +- disp->Options.Zink = EGL_FALSE; +- disp->Options.ForceSoftware = EGL_TRUE; +- if (!_eglDriver.Initialize(disp)) +- RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); +- } ++ disp->Options.Zink = EGL_FALSE; ++ disp->Options.ForceSoftware = EGL_TRUE; ++ if (!_eglDriver.Initialize(disp)) ++ RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); + } + } + +-- +2.43.0 + diff --git a/extras/mesa/0001-fix-ac-llvm-LLVM-18_-do-not-use-llvm-createLoopSinkP.patch b/extras/mesa/0001-fix-ac-llvm-LLVM-18_-do-not-use-llvm-createLoopSinkP.patch new file mode 100644 index 0000000..d9effe9 --- /dev/null +++ b/extras/mesa/0001-fix-ac-llvm-LLVM-18_-do-not-use-llvm-createLoopSinkP.patch @@ -0,0 +1,41 @@ +From d3ab117c837e537fe0b7077bb9e4c3f018153945 Mon Sep 17 00:00:00 2001 +Message-ID: +From: =?UTF-8?q?Kai=20Wasserb=C3=A4ch?= +Date: Wed, 22 Nov 2023 20:21:11 +0100 +Subject: [PATCH] fix: ac/llvm: LLVM 18_ do not use llvm::createLoopSinkPass(), + removed upstream +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +There is no alternative named in upstream commit +, +that removes the legacy pass, therefore this commit should be considered +a workaround. + +Workaround-for: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10192 +Reference: https://github.com/llvm/llvm-project/pull/72811 +Reference: https://github.com/llvm/llvm-project/commit/b9975cec0ea0a2f10d65b7bd1197d9e1706cbd3d +Signed-off-by: Kai Wasserbäch +--- + src/amd/llvm/ac_llvm_helper.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/amd/llvm/ac_llvm_helper.cpp b/src/amd/llvm/ac_llvm_helper.cpp +index 40a4399e705..b995152ee36 100644 +--- a/src/amd/llvm/ac_llvm_helper.cpp ++++ b/src/amd/llvm/ac_llvm_helper.cpp +@@ -307,8 +307,9 @@ LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef target_library_inf + unwrap(passmgr)->add(createSROAPass()); + #endif + /* TODO: restore IPSCCP */ +- if (LLVM_VERSION_MAJOR >= 16) ++ #if LLVM_VERSION_MAJOR >= 16 && LLVM_VERSION_MAJOR < 18 + unwrap(passmgr)->add(createLoopSinkPass()); ++ #endif + /* TODO: restore IPSCCP */ + unwrap(passmgr)->add(createLICMPass()); + unwrap(passmgr)->add(createCFGSimplificationPass()); +-- +2.42.0 + diff --git a/extras/mesa/0002-Revert-glx-add-automatic-zink-fallback-loading-betwe.patch b/extras/mesa/0002-Revert-glx-add-automatic-zink-fallback-loading-betwe.patch new file mode 100644 index 0000000..dc8452d --- /dev/null +++ b/extras/mesa/0002-Revert-glx-add-automatic-zink-fallback-loading-betwe.patch @@ -0,0 +1,103 @@ +From 9b9d225931b69532aa1b43abdaf29c826bc47b26 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= +Date: Wed, 17 Jan 2024 13:21:08 +0100 +Subject: [PATCH 2/2] Revert "glx: add automatic zink fallback loading between + hw and sw drivers" + +This reverts commit 7d9ea77b4598e23d4415b529924f1cbdca6e33bd. +--- + src/glx/glxext.c | 33 ++++++++------------------------- + 1 file changed, 8 insertions(+), 25 deletions(-) + +diff --git a/src/glx/glxext.c b/src/glx/glxext.c +index 39d5f08bdcf..5036fd137c1 100644 +--- a/src/glx/glxext.c ++++ b/src/glx/glxext.c +@@ -763,11 +763,10 @@ glx_screen_cleanup(struct glx_screen *psc) + ** If that works then fetch the per screen configs data. + */ + static Bool +-AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink) ++AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv) + { + struct glx_screen *psc; + GLint i, screens; +- unsigned screen_count = 0; + + /* + ** First allocate memory for the array of per screen configs. +@@ -804,21 +803,17 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink) + if (psc == NULL) + psc = applegl_create_screen(i, priv); + #else +- if (psc == NULL && !zink) ++ if (psc == NULL) + { + psc = indirect_create_screen(i, priv); + indirect = true; + } + #endif + priv->screens[i] = psc; +- if (psc) +- screen_count++; + + if(indirect) /* Load extensions required only for indirect glx */ + glxSendClientInfo(priv, i); + } +- if (zink && !screen_count) +- return GL_FALSE; + SyncHandle(); + return GL_TRUE; + } +@@ -880,9 +875,9 @@ __glXInitialize(Display * dpy) + #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) + Bool glx_direct = !debug_get_bool_option("LIBGL_ALWAYS_INDIRECT", false); + Bool glx_accel = !debug_get_bool_option("LIBGL_ALWAYS_SOFTWARE", false); ++ Bool zink; + const char *env = getenv("MESA_LOADER_DRIVER_OVERRIDE"); +- Bool zink = env && !strcmp(env, "zink"); +- Bool try_zink = False; ++ zink = env && !strcmp(env, "zink"); + + dpyPriv->drawHash = __glxHashCreate(); + +@@ -904,13 +899,10 @@ __glXInitialize(Display * dpy) + #endif /* HAVE_DRI3 */ + if (!debug_get_bool_option("LIBGL_DRI2_DISABLE", false)) + dpyPriv->dri2Display = dri2CreateDisplay(dpy); +- if (!dpyPriv->dri3Display && !dpyPriv->dri2Display) +- try_zink = !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false) && +- !getenv("GALLIUM_DRIVER"); + } + #endif /* GLX_USE_DRM */ + if (glx_direct) +- dpyPriv->driswDisplay = driswCreateDisplay(dpy, zink | try_zink); ++ dpyPriv->driswDisplay = driswCreateDisplay(dpy, zink); + + #ifdef GLX_USE_WINDOWSGL + if (glx_direct && glx_accel) +@@ -925,18 +917,9 @@ __glXInitialize(Display * dpy) + } + #endif + +- if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink)) { +- Bool fail = True; +- if (try_zink) { +- free(dpyPriv->screens); +- dpyPriv->driswDisplay->destroyDisplay(dpyPriv->driswDisplay); +- dpyPriv->driswDisplay = driswCreateDisplay(dpy, false); +- fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False); +- } +- if (fail) { +- free(dpyPriv); +- return NULL; +- } ++ if (!AllocAndFetchScreenConfigs(dpy, dpyPriv)) { ++ free(dpyPriv); ++ return NULL; + } + + glxSendClientInfo(dpyPriv, -1); +-- +2.43.0 + diff --git a/extras/mesa/Mesa-MLAA-License-Clarification-Email.txt b/extras/mesa/Mesa-MLAA-License-Clarification-Email.txt new file mode 100644 index 0000000..30bdf2e --- /dev/null +++ b/extras/mesa/Mesa-MLAA-License-Clarification-Email.txt @@ -0,0 +1,117 @@ + +Subject: RE: Question about Mesa MLAA license +From: Jorge Jimenez +Date: 01/08/2013 12:50 PM +To: Tom Callaway +CC: "jorge@iryoku.com" + +Yes to both questions. + +Thanks, +Jorge + +From: Tom Callaway +Sent: January 8, 2013 6:49 PM +To: Jorge Jimenez +CC: jorge@iryoku.com +Subject: Re: Question about Mesa MLAA license + +On 01/08/2013 12:39 PM, Jorge Jimenez wrote: +> Hi Tom, +> +> What we meant with that is that we made an exception for clause 2. +> Instead of clause 2, in the case of the Mesa project, you have to name +> the technique Jimenez's MLAA in the config options of Mesa. We did that +> just to allow them to solve license issues. This exception should be for +> the Mesa project, and any project using Mesa, like Fedora. +> +> We want to widespread usage of our MLAA, so we want to avoid any kind of +> license complications. Hope current one is good for Fedora, if not +> please tell, and we'll see what we can do! + +Okay, a few more questions: + +* If Fedora decides to simply reproduce the quoted statement: +"Uses Jimenez's MLAA. Copyright (C) 2010 by Jorge Jimenez, Belen Masia, +Jose I. Echevarria, Fernando Navarro and Diego Gutierrez." + +Specifically, if this is done as part of documentation included with +Mesa, is that sufficient to meet clause 2 even if the Mesa config option +is not set as described in your exception? + +* Currently, the Mesa config option for MLAA says: "Morphological +anti-aliasing based on Jimenez\' MLAA. 0 to disable, 8 for default +quality". Is this in compliance with your exception? + +Thanks again, + +~tom + +== +Fedora Project + +Subject: RE: Question about Mesa MLAA license +From: Jorge Jimenez +Date: 01/08/2013 12:39 PM +To: "jorge@iryoku.com" , Tom Callaway + +Hi Tom, + +What we meant with that is that we made an exception for clause 2. +Instead of clause 2, in the case of the Mesa project, you have to name +the technique Jimenez's MLAA in the config options of Mesa. We did that +just to allow them to solve license issues. This exception should be for +the Mesa project, and any project using Mesa, like Fedora. + +We want to widespread usage of our MLAA, so we want to avoid any kind of +license complications. Hope current one is good for Fedora, if not +please tell, and we'll see what we can do! + +Cheers, +Jorge + +From: Tom Callaway +Sent: January 8, 2013 6:30 PM +To: jorge@iryoku.com +Subject: Question about Mesa MLAA license + +Jorge, + +Thanks for all of your fantastic graphics work! I have been auditing +Fedora (a popular distribution of Linux) for license compliance and I +came across your MLAA code in Mesa. + +The license says: + + * 2. Redistributions in binary form must reproduce the following +statement: + * + * "Uses Jimenez's MLAA. Copyright (C) 2010 by Jorge Jimenez, Belen Masia, + * Jose I. Echevarria, Fernando Navarro and Diego Gutierrez." + * + * Only for use in the Mesa project, this point 2 is filled by naming the + * technique Jimenez's MLAA in the Mesa config options. + +That wording is unclear. When you say "Only for use in the Mesa +project...", it seems like you could either be saying: + +- This code may only be used as part of Mesa. + +OR + +- In Mesa, you can comply with clause 2 by simply selecting "Jimenez's +MLAA" in the Mesa config options. + +***** + +If the first item is true, then we may have to remove the MLAA code from +Fedora's copy of Mesa. However, looking at the license on your SMAA +code, I do not believe it to be the case. Please let me know either way! + +Thanks in advance, + +Tom Callaway +Fedora Legal + +== +Fedora Project diff --git a/extras/mesa/gnome-shell-glthread-disable.patch b/extras/mesa/gnome-shell-glthread-disable.patch new file mode 100644 index 0000000..b2caeb8 --- /dev/null +++ b/extras/mesa/gnome-shell-glthread-disable.patch @@ -0,0 +1,11 @@ +diff -up mesa-22.3.0-rc4/src/util/00-mesa-defaults.conf.dma mesa-22.3.0-rc4/src/util/00-mesa-defaults.conf +--- mesa-22.3.0-rc4/src/util/00-mesa-defaults.conf.dma 2022-11-25 10:32:32.175879868 +1000 ++++ mesa-22.3.0-rc4/src/util/00-mesa-defaults.conf 2022-11-25 10:32:43.743067470 +1000 +@@ -653,6 +653,7 @@ TODO: document the other workarounds. + + + +