From 67110aec9d887a630de8e5de857ac985b90f0874 Mon Sep 17 00:00:00 2001 From: Stephen Cheng Date: Fri, 28 Feb 2025 04:59:37 +0000 Subject: [PATCH] CA-407115: Adding logic to handle boot entries with no additional arguments Function readGrub2 parses the arguments for each entries in grub.cfg, Missing arguments would result in an error in the original code. So added logic to handle the case of an entry with no arguments (e.g. memtest86+x64.efi). Signed-off-by: Stephen Cheng --- xcp/bootloader.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/xcp/bootloader.py b/xcp/bootloader.py index 353cc7ff..2cadd5c4 100644 --- a/xcp/bootloader.py +++ b/xcp/bootloader.py @@ -345,6 +345,12 @@ def create_label(title): COUNTER += 1 return "label%d" % COUNTER + def parse_boot_entry(line): + parts = line.split(None, 2) # Split into at most 3 parts + entry = parts[1] if len(parts) > 1 else "" + args = parts[2] if len(parts) > 2 else "" + return entry, args + fh = open_textfile(src_file, "r") try: for line in fh: @@ -395,23 +401,18 @@ def create_label(title): elif title: if l.startswith("multiboot2"): if "tboot" in l: - tboot, tboot_args = (l.split(None, 1) - [1].split(None, 1)) + tboot, tboot_args = parse_boot_entry(l) else: - hypervisor, hypervisor_args = (l.split(None, 1) - [1].split(None, 1)) + hypervisor, hypervisor_args = parse_boot_entry(l) elif l.startswith("module2"): if not hypervisor: - hypervisor, hypervisor_args = (l.split(None, 1) - [1].split(None, 1)) + hypervisor, hypervisor_args = parse_boot_entry(l) elif kernel: initrd = l.split(None, 1)[1] else: - kernel, kernel_args = (l.split(None, 1) - [1].split(None, 1)) + kernel, kernel_args = parse_boot_entry(l) elif l.startswith("linux"): - kernel, kernel_args = (l.split(None, 1) - [1].split(None, 1)) + kernel, kernel_args = parse_boot_entry(l) elif l.startswith("initrd"): initrd = l.split(None, 1)[1] elif l.startswith("search --label --set root"):