Re: [PATCH] udf: Fix conversion of 'dstring' fields to UTF8

From: Jan Kara
Date: Mon Apr 25 2016 - 09:44:56 EST


On Mon 25-04-16 06:19:38, Andrew Gabbasov wrote:
> Commit 9293fcfbc1812a22ad5ce1b542eb90c1bbe01be1
> ("udf: Remove struct ustr as non-needed intermediate storage"),
> while getting rid of 'struct ustr', does not take any special care
> of 'dstring' fields and effectively use fixed field length instead
> of actual string length, encoded in the last byte of the field.
>
> Also, commit 484a10f49387e4386bf2708532e75bf78ffea2cb
> ("udf: Merge linux specific translation into CS0 conversion function")
> introduced checking of the length of the string being converted,
> requiring proper alignment to number of bytes constituing each
> character.
>
> The UDF volume identifier is represented as a 32-bytes 'dstring',
> and needs to be converted from CS0 to UTF8, while mounting UDF
> filesystem. The changes in mentioned commits can in some cases
> lead to incorrect handling of volume identifier:
> - if the actual string in 'dstring' is of maximal length and
> does not have zero bytes separating it from dstring encoded
> length in last byte, that last byte may be included in conversion,
> thus making incorrect resulting string;
> - if the identifier is encoded with 2-bytes characters (compression
> code is 16), the length of 31 bytes (32 bytes of field length minus
> 1 byte of compression code), taken as the string length, is reported
> as an incorrect (unaligned) length, and the conversion fails, which
> in its turn leads to volume mounting failure.
>
> This patch introduces handling of 'dstring' encoded length field
> in udf_CS0toUTF8 function, that is used in all and only cases
> when 'dstring' fields are converted. Currently these cases are
> processing of Volume Identifier and Volume Set Identifier fields.
> The function is also renamed to udf_dstrCS0toUTF8 to distinctly
> indicate that it handles 'dstring' input.

Thanks. I've merged the patch to my tree.

Honza
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR