diff options
author | Fabian Frederick <fabf@skynet.be> | 2015-04-08 15:23:57 -0400 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2015-05-18 05:23:06 -0400 |
commit | 6ce638367382ea8015cf64619e9bca4e207ef36f (patch) | |
tree | eb5b4c45bd2078e8a53994b6237a9969cd5c2c57 /fs/udf/unicode.c | |
parent | 5dce54b71e6185dae07ad12ca17ce30aa64022cd (diff) |
udf: Make udf_get_filename() return error instead of 0 length file name
Zero length file name isn't really valid. So check the length of the
final file name generated by udf_translate_to_linux() and return -EINVAL
instead of zero length file name. Update caller of udf_get_filename() to
not check for 0 return value.
Signed-off-by: Fabian Frederick <fabf@skynet.be>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf/unicode.c')
-rw-r--r-- | fs/udf/unicode.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/udf/unicode.c b/fs/udf/unicode.c index 97b23b0f9713..ab478e62baae 100644 --- a/fs/udf/unicode.c +++ b/fs/udf/unicode.c | |||
@@ -333,7 +333,7 @@ int udf_get_filename(struct super_block *sb, uint8_t *sname, int slen, | |||
333 | uint8_t *dname, int dlen) | 333 | uint8_t *dname, int dlen) |
334 | { | 334 | { |
335 | struct ustr *filename, *unifilename; | 335 | struct ustr *filename, *unifilename; |
336 | int ret = 0; | 336 | int ret; |
337 | 337 | ||
338 | if (!slen) | 338 | if (!slen) |
339 | return -EIO; | 339 | return -EIO; |
@@ -370,6 +370,9 @@ int udf_get_filename(struct super_block *sb, uint8_t *sname, int slen, | |||
370 | ret = udf_translate_to_linux(dname, dlen, | 370 | ret = udf_translate_to_linux(dname, dlen, |
371 | filename->u_name, filename->u_len, | 371 | filename->u_name, filename->u_len, |
372 | unifilename->u_name, unifilename->u_len); | 372 | unifilename->u_name, unifilename->u_len); |
373 | /* Zero length filename isn't valid... */ | ||
374 | if (ret == 0) | ||
375 | ret = -EINVAL; | ||
373 | out2: | 376 | out2: |
374 | kfree(unifilename); | 377 | kfree(unifilename); |
375 | out1: | 378 | out1: |