Created attachment 15147 [details] Patch to fix the issue. For FS_VOLUME_INFO/FS_INFO operation, a maximum of 32 characters are sent back. However, since Samba chops off any share name with >32 bytes at 32, it is possible that a multi-byte share name can get chopped off between a full character. This causes the string decoding for unicode failure which sends back NT_STATUS_ILLEGAL_CHARACTER (EILSEQ) to the client applications. On Windows, Notepad doesn't like it, and refuses to open a file in this case and fails with the following error: Invalid character. For multibyte character sets, only the leading byte is included without the trailing byte. For Unicode character sets, include the characters 0xFFFF and 0xFFFE. I've found a solution and have attached a patch with a fix. Proposed fix: - Find the last starting point of a multibyte codepoint if the character at 32nd byte is a subsequent byte of a MB codepoint.
To reproduce, create a share with a name where byte 31 and 32 are not the first byte of a mutlibyte character. Using CJK characters (3 bytes each) is a possible approach. For example, creating a share with name 에이에프에스삼점오생성 and trying to open a txt file in Notepad gives the following error: Invalid character. For multibyte character sets, only the leading byte is included without the trailing byte. For Unicode character sets, include the characters 0xFFFF and 0xFFFE. Looking at wireshark capture, the following is seen as source of this issue: GetInfo Request FS_INFO/FileFsVolumeInformation File: Rathi9\??????????? GetInfo Response, Error: STATUS_ILLEGAL_CHARACTER Proposed solution is to truncate the label name at the end of a multibyte character before the 32nd byte.
Created attachment 15158 [details] git-am fix for master. Fix OK'ed by original submitter.
Created attachment 15163 [details] git-am fix for 4.10.next, 4.9.next. Cherry-picked from master.
Reassigning to Karolin for inclusion in 4.9 and 4.10.
Pushed to autobuild-v4-{10,9}-test.
(In reply to Karolin Seeger from comment #5) Pushed to both branches. Closing out bug report. Thanks!