mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
pygrub: Fix regression from c/s d1b93ea, attempt 2
c/sd1b93eacauses substantial functional regressions in pygrub's ability to parse bootloader configuration files. c/sd1b93eaitself changed an an interface which previously used exclusively integers, to using strings in the case of a grub configuration with explicit default set, along with changing the code calling the interface to require a string. The default value for "default" remained as an integer. As a result, any Extlinux or Lilo configuration (which drives this interface exclusively with integers), or Grub configuration which doesn't explicitly declare a default will die with an AttributeError when attempting to call "self.cf.default.isdigit()" where "default" is an integer. Sadly, this AttributeError gets swallowed by the blanket ignore in the loop which searches partitions for valid bootloader configurations, causing the issue to be reported as "Unable to find partition containing kernel" We should explicitly check type of "default" in image_index() and process it appropriately. Reported-by: Andrew Cooper <andrew.cooper3@citrix.com> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> (cherry picked from commit3b27981170)
This commit is contained in:
1 parent
7962c936a4
commit
bc0ce24c8f
1 file changed
+3
-1
Regular → Executable
+3
-1
@@ -461,7 +461,9 @@ class Grub:
|
||||
self.cf.parse(buf)
|
||||
|
||||
def image_index(self):
|
||||
if self.cf.default.isdigit():
|
||||
if isinstance(self.cf.default, int):
|
||||
sel = self.cf.default
|
||||
elif self.cf.default.isdigit():
|
||||
sel = int(self.cf.default)
|
||||
else:
|
||||
# We don't fully support submenus. Look for the leaf value in
|
||||
|
||||