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: Sun, 2 Jul 2017 12:36:09 +0200
User-agent: KMail/1.13.7 (Linux/3.13.0-117-generic; KDE/4.14.2; x86_64; ; )

On Thursday 22 June 2017 14:33:17 Pali Rohár wrote:
> 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.
> ---

Hi! Any comments on this patch? Specially how to deal with empty labels?

>  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

-- 
Pali Rohár
address@hidden

Attachment: signature.asc
Description: This is a digitally signed message part.


reply via email to

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