mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
fs/exfat: use correct length for utf conversion
when call utf16s_to_utf8s, last parmater 'maxout' will be reduced with the returned value of utf32_to_utf8, the value reflects the size of one utf character, it could be 1~max charset size(3), so maxout should use MAX_NAME_LENGTH * MAX_CHARSET_SIZE when call utf8s_to_utf16s, the inlen will be reduced with the the returned value of utf8_to_utf32, so it should use MAX_NAME_LENGTH * MAX_CHARSET_SIZE or the lenghth of p_cstring whose max value is MAX_NAME_LENGTH * MAX_CHARSET_SIZE. Change-Id: Icbea02ece4b1a5b015037a6a54178ee8e08d4325 Signed-off-by: Shengzhe Zhao <a18689@motorola.com> Signed-off-by: Shiyong Li <a22381@motorola.com> Reviewed-on: https://gerrit.mot.com/1102180 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Igor Kovalenko <igork@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
a77212a42c
commit
251b18ea98
1 changed files with 5 additions and 2 deletions
|
|
@ -295,7 +295,9 @@ void nls_uniname_to_cstring(struct super_block *sb, u8 *p_cstring, UNI_NAME_T *p
|
|||
struct nls_table *nls = EXFAT_SB(sb)->nls_io;
|
||||
|
||||
if (nls == NULL) {
|
||||
len = utf16s_to_utf8s(uniname, MAX_NAME_LENGTH, UTF16_HOST_ENDIAN, p_cstring, MAX_NAME_LENGTH);
|
||||
len = utf16s_to_utf8s(uniname, MAX_NAME_LENGTH,
|
||||
UTF16_HOST_ENDIAN, p_cstring,
|
||||
MAX_NAME_LENGTH * MAX_CHARSET_SIZE);
|
||||
if (len >= MAX_NAME_LENGTH * MAX_CHARSET_SIZE)
|
||||
len--;
|
||||
|
||||
|
|
@ -359,7 +361,8 @@ void nls_cstring_to_uniname(struct super_block *sb, UNI_NAME_T *p_uniname, u8 *p
|
|||
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,0,101)
|
||||
i = utf8s_to_utf16s(p_cstring, MAX_NAME_LENGTH, uniname);
|
||||
#else
|
||||
i = utf8s_to_utf16s(p_cstring, MAX_NAME_LENGTH, UTF16_HOST_ENDIAN, uniname, MAX_NAME_LENGTH);
|
||||
i = utf8s_to_utf16s(p_cstring, MAX_NAME_LENGTH * MAX_CHARSET_SIZE,
|
||||
UTF16_HOST_ENDIAN, uniname, MAX_NAME_LENGTH);
|
||||
#endif
|
||||
for (j = 0; j < i; j++)
|
||||
SET16_A(upname + j * 2, nls_upper(sb, uniname[j]));
|
||||
|
|
|
|||
Loading…
Reference in a new issue