From a8f5a8e7a33e39c393fb94cc47f65d46907b4261 Mon Sep 17 00:00:00 2001 From: Andy Baugh Date: Tue, 6 Jun 2023 16:37:42 +0000 Subject: [PATCH] Fix for strange issue with binary garbage in smaps files = changelog = msg: Avoid issue with garbage smaps chars in needs-restarting.py type: bugfix resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2212953 related: None --- plugins/needs_restarting.py | 2 +- tests/test_needs_restarting.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/plugins/needs_restarting.py b/plugins/needs_restarting.py index 8dbc965..baadde0 100644 --- a/plugins/needs_restarting.py +++ b/plugins/needs_restarting.py @@ -74,7 +74,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 7b629b4..d7dd6d5 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, @@ -15,15 +16,15 @@ # Red Hat, Inc. # - from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from unittest.mock import patch, Mock import dbus 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)' @@ -58,6 +59,17 @@ class NeedsRestartingTest(tests.support.TestCase): patch( "dbus.bus.BusConnection.__new__", side_effect=dbus.DBusException("Never should hit this exception if mock above works")): self.assertIsNone(func(1234)) + 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): ofile = needs_restarting.OpenedFile( -- libgit2 1.6.4