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 <pali.ro...@gmail.com> 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
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to