From defb3fb6508306f65c3d954bb744e341f124907c Mon Sep 17 00:00:00 2001
From: Jonathan Wright <jonathan@almalinux.org>
Date: Mon, 14 Aug 2023 12:20:50 -0500
Subject: [PATCH] Resolves rhbz#2212953 error with handling invalid utf-8 chars

Signed-off-by: Jonathan Wright <jonathan@almalinux.org>
---
 .../0006-Fix-issue-with-invalid-utf8.patch    | 63 +++++++++++++++++++
 SPECS/dnf-plugins-core.spec                   |  6 +-
 2 files changed, 68 insertions(+), 1 deletion(-)
 create mode 100644 SOURCES/0006-Fix-issue-with-invalid-utf8.patch

diff --git a/SOURCES/0006-Fix-issue-with-invalid-utf8.patch b/SOURCES/0006-Fix-issue-with-invalid-utf8.patch
new file mode 100644
index 0000000..296ecd3
--- /dev/null
+++ b/SOURCES/0006-Fix-issue-with-invalid-utf8.patch
@@ -0,0 +1,63 @@
+From 7860463eb5ccc844f1d580edd7f12496fb6923b3 Mon Sep 17 00:00:00 2001
+From: Jonathan Wright <jonathan@almalinux.org>
+Date: Mon, 14 Aug 2023 09:55:12 -0500
+Subject: [PATCH] fixes error with handling invalid utf-8 chars in
+ needs-restarting
+
+---
+ plugins/needs_restarting.py    |  2 +-
+ tests/test_needs_restarting.py | 13 +++++++++++++
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/plugins/needs_restarting.py b/plugins/needs_restarting.py
+index 1fedb73..d8ab0bc 100644
+--- a/plugins/needs_restarting.py
++++ b/plugins/needs_restarting.py
+@@ -73,7 +73,7 @@ def list_opened_files(uid):
+         try:
+             if uid is not None and uid != owner_uid(smaps):
+                 continue
+-            with open(smaps, 'r') as smaps_file:
++            with open(smaps, 'r', errors='replace') as smaps_file:
+                 lines = smaps_file.readlines()
+         except EnvironmentError:
+             logger.warning("Failed to read PID %d's smaps.", pid)
+diff --git a/tests/test_needs_restarting.py b/tests/test_needs_restarting.py
+index 0ad70a5..c021e06 100644
+--- a/tests/test_needs_restarting.py
++++ b/tests/test_needs_restarting.py
+@@ -1,3 +1,4 @@
++# coding: utf-8
+ # Copyright (C) 2014 Red Hat, Inc.
+ #
+ # This copyrighted material is made available to anyone wishing to use,
+@@ -20,8 +21,10 @@ from __future__ import absolute_import
+ from __future__ import print_function
+ from __future__ import unicode_literals
+
++from unittest.mock import patch
+ import needs_restarting
+ import tests.support
++import tempfile
+
+ DEL_FILE = '3dcf000000-3dcf032000 r-xp 00000000 08:02 140759                ' \
+            '         /usr/lib64/libXfont.so.1.4.1;5408628d (deleted)'
+@@ -46,6 +49,16 @@ class NeedsRestartingTest(tests.support.TestCase):
+         self.assertTrue(ofile.deleted)
+         self.assertEqual(ofile.name, '/usr/lib64/libXfont.so.1.4.1;5408628d')
+
++    def test_list_opened_files_garbage_filename(self):
++        tempObj = tempfile.NamedTemporaryFile()
++        tempFile = tempObj.name
++        with open(tempFile, 'wb') as bogusFile:
++            bogusFile.write(b'151e7f7b7000-151e7f7b8000 r--p 00006000 fd:01 14744                      /usr/lib64/lib\xe5Evil-13.37.so')
++        smaps = [[1234,tempObj.name]]
++        with patch("needs_restarting.list_smaps", return_value=smaps):
++            ofiles = list(needs_restarting.list_opened_files(None));
++            self.assertEqual(ofiles[0].presumed_name, '/usr/lib64/lib�Evil-13.37.so')
++
+
+ class OpenedFileTest(tests.support.TestCase):
+     def test_presumed_name(self):
+--
+2.41.0
diff --git a/SPECS/dnf-plugins-core.spec b/SPECS/dnf-plugins-core.spec
index c1155de..b1223a5 100644
--- a/SPECS/dnf-plugins-core.spec
+++ b/SPECS/dnf-plugins-core.spec
@@ -34,7 +34,7 @@
 
 Name:           dnf-plugins-core
 Version:        4.3.0
-Release:        5%{?dist}
+Release:        5%{?dist}.alma.1
 Summary:        Core Plugins for DNF
 License:        GPLv2+
 URL:            https://github.com/rpm-software-management/dnf-plugins-core
@@ -44,6 +44,7 @@ Patch2:         0002-Add-a-warning-when-using-system-upgrade-on-RHEL.patch
 Patch3:         0003-offline-upgrade-Add-security-filters.patch
 Patch4:         0004-system-upgrade-Show-warning-always-for-a-downstream.patch
 Patch5:         0005-Update-translations.patch
+Patch6:         0006-Fix-issue-with-invalid-utf8.patch
 
 
 BuildArch:      noarch
@@ -820,6 +821,9 @@ ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/
 %endif
 
 %changelog
+* Mon Aug 14 2023 Jonathan Wright <jonathan@almalinux.org> - 4.3.0-5.alma.1
+- Resolves rhbz#2231923 - Smaps file parsing in DNF's needs-restarting cannot handle garbage UTF-8-ish characters in smaps lines
+
 * Wed Mar 15 2023 Marek Blaha <mblaha@redhat.com> - 4.3.0-5
 - Update translations
 
-- 
2.43.5