summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrevor Gamblin <tgamblin@baylibre.com>2024-12-23 11:20:51 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2025-01-03 11:05:03 +0000
commit418235f06803c901184d5c4a3883c0dbecee1f06 (patch)
tree9a82263942f5ea06c50689ce0d6652a442746459
parent4fe8c5de06d1666984b79ae06d0f8105e21ff0ac (diff)
downloadpoky-418235f06803c901184d5c4a3883c0dbecee1f06.tar.gz
libdnf: backport patch to fix segfault
This is needed to allow libdnf to build OK with python 3.13.1. Without it, a vague "Could not invoke dnf" error is seen during rootfs (e.g. when building core-image-full-cmdline), with a return code of -11. (From OE-Core rev: 5104807bdb952e90e831759266bd830d523e3d16) Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/libdnf/libdnf/0001-Fix-a-segfault-in-iterator-of-a-ConfigParser-section.patch84
-rw-r--r--meta/recipes-devtools/libdnf/libdnf_0.73.4.bb1
2 files changed, 85 insertions, 0 deletions
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-Fix-a-segfault-in-iterator-of-a-ConfigParser-section.patch b/meta/recipes-devtools/libdnf/libdnf/0001-Fix-a-segfault-in-iterator-of-a-ConfigParser-section.patch
new file mode 100644
index 0000000000..1c62d02455
--- /dev/null
+++ b/meta/recipes-devtools/libdnf/libdnf/0001-Fix-a-segfault-in-iterator-of-a-ConfigParser-section.patch
@@ -0,0 +1,84 @@
1From f3302a865b230e021e9defbcea978ed1290a9b2f Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
3Date: Fri, 6 Dec 2024 18:01:16 +0100
4Subject: [PATCH] Fix a segfault in iterator of a ConfigParser section
5
6An iterator should return self on __iter__.
7
8So that this works:
9
10 >>> it1 = iter(sectObj)
11 >>> it2 = iter(it1)
12 >>> it1 is it2
13 True
14
15Previously, this iterator did not return self on __iter__, it was like this:
16
17 class PreserveOrderMapStringStringIterator(object):
18 ...
19 def __iter__(self):
20 return _common_types.PreserveOrderMapStringStringIterator___iter__(self)
21
22And that returned a new Python object.
23
24This fixes https://bugzilla.redhat.com/2330562 by avoiding a second iterator object.
25
26My SWIG skills are close to zero,
27perhaps this is not the best way to return self, but it seems to work.
28
29Upstream-Status: Backport
30(https://github.com/rpm-software-management/libdnf/commit/f3302a865b)
31
32Backport so that it works properly with Python 3.13.1.
33
34Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
35
36---
37 bindings/swig/common_types.i | 11 +++++++----
38 bindings/swig/conf.i | 4 ----
39 2 files changed, 7 insertions(+), 8 deletions(-)
40
41diff --git a/bindings/swig/common_types.i b/bindings/swig/common_types.i
42index c9ae798a..a1f90d9e 100644
43--- a/bindings/swig/common_types.i
44+++ b/bindings/swig/common_types.i
45@@ -63,10 +63,6 @@ template<class T>
46 class Iterator {
47 public:
48 Iterator(typename T::iterator _cur, typename T::iterator _end) : cur(_cur), end(_end) {}
49- Iterator* __iter__()
50- {
51- return this;
52- }
53
54 typename T::iterator cur;
55 typename T::iterator end;
56@@ -165,3 +161,10 @@ EXTEND_TEMPLATE_PreserveOrderMapIterator(std::string, std::string)
57 EXTEND_TEMPLATE_PreserveOrderMapIterator(std::string, libdnf::PreserveOrderMap<std::string, std::string>)
58
59 %exception; // beware this resets all exception handlers if you import this file after defining any
60+
61+%pythoncode %{
62+def PreserveOrderMapStringStringIterator___iter__(self):
63+ return self
64+PreserveOrderMapStringStringIterator.__iter__ = PreserveOrderMapStringStringIterator___iter__
65+del PreserveOrderMapStringStringIterator___iter__
66+%}
67diff --git a/bindings/swig/conf.i b/bindings/swig/conf.i
68index b6a0ce88..2f77003f 100644
69--- a/bindings/swig/conf.i
70+++ b/bindings/swig/conf.i
71@@ -71,10 +71,6 @@ template<class T>
72 class Iterator {
73 public:
74 Iterator(typename T::iterator _cur, typename T::iterator _end) : cur(_cur), end(_end) {}
75- Iterator* __iter__()
76- {
77- return this;
78- }
79
80 typename T::iterator cur;
81 typename T::iterator end;
82--
832.39.5
84
diff --git a/meta/recipes-devtools/libdnf/libdnf_0.73.4.bb b/meta/recipes-devtools/libdnf/libdnf_0.73.4.bb
index 0817da7ca6..5b9e734e82 100644
--- a/meta/recipes-devtools/libdnf/libdnf_0.73.4.bb
+++ b/meta/recipes-devtools/libdnf/libdnf_0.73.4.bb
@@ -11,6 +11,7 @@ SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;p
11 file://enable_test_data_dir_set.patch \ 11 file://enable_test_data_dir_set.patch \
12 file://0001-drop-FindPythonInstDir.cmake.patch \ 12 file://0001-drop-FindPythonInstDir.cmake.patch \
13 file://armarch.patch \ 13 file://armarch.patch \
14 file://0001-Fix-a-segfault-in-iterator-of-a-ConfigParser-section.patch \
14 " 15 "
15 16
16SRCREV = "79ed383cd5a822e6d8d9d549835383f5c5106204" 17SRCREV = "79ed383cd5a822e6d8d9d549835383f5c5106204"