|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.5 RFC] pygrub: Fix regression from c/s d1b93ea, attempt 2
On Thu, 2014-11-20 at 16:08 +0000, Andrew Cooper wrote:
> On 20/11/14 16:00, Ian Campbell wrote:
> > On Mon, 2014-11-17 at 15:19 +0000, Andrew Cooper wrote:
> >> c/s d1b93ea causes substantial functional regressions in pygrub's ability
> >> to
> >> parse bootloader configuration files.
> >>
> >> c/s d1b93ea itself 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"
> >>
> >> This patch attempts to fix the issue by altering all parts of this
> >> interface
> >> to use strings, as opposed to integers.
> > Would it be less invasive at this point in the release to have the place
> > where this stuff is used do isinstance(s, str) and isinstance(s, int)?
>
> It would be BaseString not str, but I am fairly sure the classes have
> altered through Py2's history. I would not be any more confident with
> that as a solution as trying to correctly to start with.
Actually isinstance(s, basestring) is what the webpage I was looking at
said, but I cut-n-pasted the wrong thing.
But regardless could it not do something like:
if !isinstance(foo.cf.default, int):
blah = int(foo.cf.default)
elif foo.cf.default.isdigit():
blah = whatever
and avoid the confusion about what is/isn't a string class while still
fixing the issue?
> sel comes either from g.image_index() which strictly is an integer, or
> pulled out of the loop immediately preceding and strictly an integer.
Ah, good.
> I can't however find anything which could cause it to have the value
> -1. All error paths I can spot use 0 instead and load the first entry.
>
> ~Andrew
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |