Bug 2141215

Summary: dnf dies with "Config error: 'utf-8' codec can't decode byte" when a vim swp file exists
Product: Red Hat Enterprise Linux 8 Reporter: Renaud Métrich <rmetrich>
Component: dnfAssignee: Jan Kolarik <jkolarik>
Status: CLOSED ERRATA QA Contact: Eva Mrakova <emrakova>
Severity: medium Docs Contact: Mariya Pershina <mpershin>
Priority: medium    
Version: 8.6CC: james.antill, jkolarik, mbanas, mpershin, nsella
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: dnf-4.7.0-15.el8 Doc Type: No Doc Update
Doc Text:
Story Points: ---
Clone Of:
: 2148871 (view as bug list) Environment:
Last Closed: 2023-05-16 09:06:58 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:    
Bug Blocks: 2148871    

Description Renaud Métrich 2022-11-09 07:02:01 UTC
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

Comment 1 Jan Kolarik 2022-11-09 07:47:19 UTC
PR was created to fix this behavior: https://github.com/rpm-software-management/dnf/pull/1860.

Comment 2 Jaroslav Mracek 2022-11-28 06:43:05 UTC
CI test - https://github.com/rpm-software-management/ci-dnf-stack/pull/1176

Comment 3 Jan Kolarik 2022-11-28 08:54:43 UTC
Cloned into RHEL9 ticket https://bugzilla.redhat.com/show_bug.cgi?id=2148871.

Comment 12 errata-xmlrpc 2023-05-16 09:06:58 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:2980