diff options
author | Zuul <zuul@review.opendev.org> | 2022-03-11 20:11:31 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-03-11 20:11:31 +0000 |
commit | 2490777459d6033a9b30e756aad68c3bd8608ede (patch) | |
tree | 9b824538ae12e06ff7b6424e0109ad40912d86b0 | |
parent | 5d7e529f095a706b1d5085d03c8b50b3df4f57ad (diff) | |
parent | 99b9d1403cacd3bbd489a6cf6913f32746ef6083 (diff) | |
download | ironic-python-agent-2490777459d6033a9b30e756aad68c3bd8608ede.tar.gz |
Merge "Use utf-16-le if BOM not present" into bugfix/8.3
-rw-r--r-- | ironic_python_agent/efi_utils.py | 10 | ||||
-rw-r--r-- | releasenotes/notes/detect-endianness-f53a6c4571aba3fe.yaml | 6 |
2 files changed, 14 insertions, 2 deletions
diff --git a/ironic_python_agent/efi_utils.py b/ironic_python_agent/efi_utils.py index 156f818a..d241d80a 100644 --- a/ironic_python_agent/efi_utils.py +++ b/ironic_python_agent/efi_utils.py @@ -248,8 +248,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])) diff --git a/releasenotes/notes/detect-endianness-f53a6c4571aba3fe.yaml b/releasenotes/notes/detect-endianness-f53a6c4571aba3fe.yaml new file mode 100644 index 00000000..82d90886 --- /dev/null +++ b/releasenotes/notes/detect-endianness-f53a6c4571aba3fe.yaml @@ -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. |