Use utf-16-le if BOM not present

In case no BOM is present in the CSV file the utf-16 codec won't work.
We fail over to utf-16-le as Little Endian is commonly used.

Change-Id: I3e25ce4997f5dd3df87caba753daced65838f85a
This commit is contained in:
Riccardo Pittau 2022-02-21 18:18:29 +01:00
parent a83f38479e
commit 697fa6f3b6
2 changed files with 14 additions and 2 deletions

View File

@ -297,8 +297,14 @@ def _run_efibootmgr(valid_efi_bootloaders, device, efi_partition,
'File: %s', v_bl)
# These files are always UTF-16 encoded, sometimes have a header.
# Positive bonus is python silently drops the FEFF header.
with open(mount_point + '/' + v_bl, 'r', encoding='utf-16') as csv:
contents = str(csv.read())
try:
with open(mount_point + '/' + v_bl, 'r',
encoding='utf-16') as csv:
contents = str(csv.read())
except UnicodeError:
with open(mount_point + '/' + v_bl, 'r',
encoding='utf-16-le') as csv:
contents = str(csv.read())
csv_contents = contents.split(',', maxsplit=3)
csv_filename = v_bl.split('/')[-1]
v_efi_bl_path = v_bl.replace(csv_filename, str(csv_contents[0]))

View File

@ -0,0 +1,6 @@
---
fixes:
- |
In case the CSV file used for the bootloader hint does not have BOM
we fail reading its content as utf-16 codec is too generic.
Fail over to utf-16-le as Little Endian is mostly used.