mirror of
https://git.yoctoproject.org/poky
synced 2026-05-09 17:39:31 +00:00
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>
This commit is contained in:
committed by
Richard Purdie
parent
4fe8c5de06
commit
418235f068
+84
@@ -0,0 +1,84 @@
|
||||
From f3302a865b230e021e9defbcea978ed1290a9b2f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
|
||||
Date: Fri, 6 Dec 2024 18:01:16 +0100
|
||||
Subject: [PATCH] Fix a segfault in iterator of a ConfigParser section
|
||||
|
||||
An iterator should return self on __iter__.
|
||||
|
||||
So that this works:
|
||||
|
||||
>>> it1 = iter(sectObj)
|
||||
>>> it2 = iter(it1)
|
||||
>>> it1 is it2
|
||||
True
|
||||
|
||||
Previously, this iterator did not return self on __iter__, it was like this:
|
||||
|
||||
class PreserveOrderMapStringStringIterator(object):
|
||||
...
|
||||
def __iter__(self):
|
||||
return _common_types.PreserveOrderMapStringStringIterator___iter__(self)
|
||||
|
||||
And that returned a new Python object.
|
||||
|
||||
This fixes https://bugzilla.redhat.com/2330562 by avoiding a second iterator object.
|
||||
|
||||
My SWIG skills are close to zero,
|
||||
perhaps this is not the best way to return self, but it seems to work.
|
||||
|
||||
Upstream-Status: Backport
|
||||
(https://github.com/rpm-software-management/libdnf/commit/f3302a865b)
|
||||
|
||||
Backport so that it works properly with Python 3.13.1.
|
||||
|
||||
Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
|
||||
|
||||
---
|
||||
bindings/swig/common_types.i | 11 +++++++----
|
||||
bindings/swig/conf.i | 4 ----
|
||||
2 files changed, 7 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/bindings/swig/common_types.i b/bindings/swig/common_types.i
|
||||
index c9ae798a..a1f90d9e 100644
|
||||
--- a/bindings/swig/common_types.i
|
||||
+++ b/bindings/swig/common_types.i
|
||||
@@ -63,10 +63,6 @@ template<class T>
|
||||
class Iterator {
|
||||
public:
|
||||
Iterator(typename T::iterator _cur, typename T::iterator _end) : cur(_cur), end(_end) {}
|
||||
- Iterator* __iter__()
|
||||
- {
|
||||
- return this;
|
||||
- }
|
||||
|
||||
typename T::iterator cur;
|
||||
typename T::iterator end;
|
||||
@@ -165,3 +161,10 @@ EXTEND_TEMPLATE_PreserveOrderMapIterator(std::string, std::string)
|
||||
EXTEND_TEMPLATE_PreserveOrderMapIterator(std::string, libdnf::PreserveOrderMap<std::string, std::string>)
|
||||
|
||||
%exception; // beware this resets all exception handlers if you import this file after defining any
|
||||
+
|
||||
+%pythoncode %{
|
||||
+def PreserveOrderMapStringStringIterator___iter__(self):
|
||||
+ return self
|
||||
+PreserveOrderMapStringStringIterator.__iter__ = PreserveOrderMapStringStringIterator___iter__
|
||||
+del PreserveOrderMapStringStringIterator___iter__
|
||||
+%}
|
||||
diff --git a/bindings/swig/conf.i b/bindings/swig/conf.i
|
||||
index b6a0ce88..2f77003f 100644
|
||||
--- a/bindings/swig/conf.i
|
||||
+++ b/bindings/swig/conf.i
|
||||
@@ -71,10 +71,6 @@ template<class T>
|
||||
class Iterator {
|
||||
public:
|
||||
Iterator(typename T::iterator _cur, typename T::iterator _end) : cur(_cur), end(_end) {}
|
||||
- Iterator* __iter__()
|
||||
- {
|
||||
- return this;
|
||||
- }
|
||||
|
||||
typename T::iterator cur;
|
||||
typename T::iterator end;
|
||||
--
|
||||
2.39.5
|
||||
|
||||
@@ -11,6 +11,7 @@ SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;p
|
||||
file://enable_test_data_dir_set.patch \
|
||||
file://0001-drop-FindPythonInstDir.cmake.patch \
|
||||
file://armarch.patch \
|
||||
file://0001-Fix-a-segfault-in-iterator-of-a-ConfigParser-section.patch \
|
||||
"
|
||||
|
||||
SRCREV = "79ed383cd5a822e6d8d9d549835383f5c5106204"
|
||||
|
||||
Reference in New Issue
Block a user