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