grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] * grub-core/fs/udf.c: Fix reading label, lvd.ident is dstrin


From: Pali Rohár
Subject: Re: [PATCH] * grub-core/fs/udf.c: Fix reading label, lvd.ident is dstring
Date: Tue, 8 Aug 2017 09:18:08 +0200
User-agent: Mutt/1.5.23.1 (2014-03-12)

Thanks a lot!

On Monday 07 August 2017 15:40:15 Vladimir 'phcoder' Serbinenko wrote:
> Committed with fixes and simplifications. The biggest problem was lack of
> check whether grub_malloc succeeded
> 
> Le Thu, Jun 22, 2017 à 2:34 PM, Pali Rohár <address@hidden> a écrit :
> 
> > UDF dstring has stored length in the last byte of buffer. Therefore last
> > byte is not part of recorded characters. And empty string in dstring is
> > encoded as empty buffer, including first byte (compression id).
> > ---
> > I'm not sure how Grub2 should handle empty label. Current patch set
> > empty buffer for empty label. But it is possible to ignore and do not
> > set label in this case at all.
> > ---
> >  grub-core/fs/udf.c |   21 ++++++++++++++++++++-
> >  1 file changed, 20 insertions(+), 1 deletion(-)
> >
> > diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c
> > index 839bff8..e7a4d4e 100644
> > --- a/grub-core/fs/udf.c
> > +++ b/grub-core/fs/udf.c
> > @@ -860,6 +860,25 @@ read_string (const grub_uint8_t *raw, grub_size_t sz,
> > char *outbuf)
> >    return outbuf;
> >  }
> >
> > +static char *
> > +read_dstring (const grub_uint8_t *raw, grub_size_t sz, char *outbuf)
> > +{
> > +  grub_size_t len;
> > +
> > +  if (raw[0] == 0)
> > +    {
> > +      if (!outbuf)
> > +        outbuf = grub_malloc (1);
> > +      outbuf[0] = 0;
> > +      return outbuf;
> > +    }
> > +
> > +  len = raw[sz - 1];
> > +  if (len > sz - 1)
> > +    len = sz - 1;
> > +  return read_string (raw, len, outbuf);
> > +}
> > +
> >  static int
> >  grub_udf_iterate_dir (grub_fshelp_node_t dir,
> >                       grub_fshelp_iterate_dir_hook_t hook, void *hook_data)
> > @@ -1197,7 +1216,7 @@ grub_udf_label (grub_device_t device, char **label)
> >
> >    if (data)
> >      {
> > -      *label = read_string (data->lvd.ident, sizeof (data->lvd.ident), 0);
> > +      *label = read_dstring (data->lvd.ident, sizeof (data->lvd.ident),
> > 0);
> >        grub_free (data);
> >      }
> >    else
> > --
> > 1.7.9.5
> >
> >
> > _______________________________________________
> > Grub-devel mailing list
> > address@hidden
> > https://lists.gnu.org/mailman/listinfo/grub-devel
> >

-- 
Pali Rohár
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]