Bug 2148871

Summary: dnf dies with "Config error: 'utf-8' codec can't decode byte" when a vim swp file exists
Product: Red Hat Enterprise Linux 9 Reporter: Jan Kolarik <jkolarik>
Component: dnfAssignee: Jan Kolarik <jkolarik>
Status: CLOSED ERRATA QA Contact: Eva Mrakova <emrakova>
Severity: medium Docs Contact: Mariya Pershina <mpershin>
Priority: medium    
Version: 9.2CC: james.antill, jkolarik, mbanas, mpershin, nsella, rmetrich, swm-qe
Target Milestone: rcKeywords: Triaged
Target Release: ---Flags: pm-rhel: mirror+
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: dnf-4.14.0-4.el9 Doc Type: No Doc Update
Doc Text:
Story Points: ---
Clone Of: 2141215 Environment:
Last Closed: 2023-05-09 08:18:23 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2141215    
Bug Blocks:    
Deadline: 2023-01-16   

Description Jan Kolarik 2022-11-28 08:50:08 UTC
+++ This bug was initially created as a clone of Bug #2141215 +++

Description of problem:

In case someone is editing a file using *vim*, e.g. `vim /etc/dnf/vars/releasever` and keeps the editor open, or editor died without having deleted the `.releasever.swp` file), DNF dies continuously when trying to decode the content:

-------- 8< ---------------- 8< ---------------- 8< ---------------- 8< --------
# dnf install net-snmp
Config error: 'utf-8' codec can't decode byte 0x8d in position 16: invalid start byte
-------- 8< ---------------- 8< ---------------- 8< ---------------- 8< --------

The reason for this is DNF reads and processes the swp file, as seen with strace:
-------- 8< ---------------- 8< ---------------- 8< ---------------- 8< --------
 :
721625 11:53:32.319506 read(6</etc/dnf/vars/.releasever.swp>, "b0VIM 8.0\0\0\0\0\20\0\0\213,\304a\234\36020V\16\0\0root\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0xpointwebsrv-new\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
 :
-------- 8< ---------------- 8< ---------------- 8< ---------------- 8< --------

Apparently all files in /etc/dnf/vars are processed, even if the filename doesn't look like a DNF variable.
We need to harden this to avoid either opening non-expected filenames, or continue the processing without dying.

Version-Release number of selected component (if applicable):

dnf-4.7.0-8.el8.noarch

How reproducible:

Always

Steps to Reproduce:
1. Create/open /etc/dnf/vars/releasever using *vim*

  # vim /etc/dnf/vars/releasever

  Write "8" to it, save and keep the editor open

2. Try installing a package from another terminal

  # dnf install net-snmp

Actual results:

Config error: 'utf-8' codec can't decode byte 0x8d in position 16: invalid start byte

Expected results:

DNF continuing

--- Additional comment from Jan Kolarik on 2022-11-09 08:47:19 CET ---

PR was created to fix this behavior: https://github.com/rpm-software-management/dnf/pull/1860.

--- Additional comment from Jaroslav Mracek on 2022-11-28 07:43:05 CET ---

CI test - https://github.com/rpm-software-management/ci-dnf-stack/pull/1176

Comment 1 Jan Kolarik 2022-11-28 08:52:42 UTC
Fixed by the original ticket from RHEL8: https://bugzilla.redhat.com/show_bug.cgi?id=2141215

Comment 9 errata-xmlrpc 2023-05-09 08:18:23 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (dnf bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2023:2490