Re: Null-Terminating bcc_ptr wrong?

Jeff Layton <[email protected]>
Newsgroups gmane.linux.file-systems.cifs
Message-ID <[email protected]>
On Fri, 10 Apr 2009 10:56:53 -0500
"Christopher R. Hertel" <[email protected]> wrote:

> Peter Hudec wrote:
> > Christopher R. Hertel wrote:
> >> This is a tangent, but...
> >>
> >> It shouldn't be UTF-8.  CIFS (the protocol) supports UCS-16LE Unicode
> >> encoding or 8-bit extended ASCII (OEM charset).
> >>
> >> Chris -)-----
> > The protocol SMB/CIFS uses UCS-2LE (to be correct), but the conversion
> > may be done to UTF-8.
> 
> So, I double checked.  :)
> 
> You are correct that there is no "UCS-16LE".  Ooops.  What I meant to write
> was UTF-16LE.  According to current docs ([MS-UCODEREF]), Microsoft supports
> full UTF-16 as opposed to UCS-2.
> 
> > The UCS-2LE-string from the packet can grow up to 4 bytes/character or
> > twice as big as UCS-2LE (it can - it does not necessarily do so!)
> 
> UCS-2 does not support surrogate pairs, so the encoding is actually fixed at
> 16 bits per code point.  UTF-16 does support surrogate pairs, which is where
> the expansion becomes possible.
> 
> > To determine the size of the target buffer without calculating it the
> > correct line should be:
> > 
> > tcon->nativeFileSystem = kzalloc(4 * (length + 1), GFP_KERNEL);
> 
> That'd be the safe way, though the terminating nul would still be only 2
> bytes so you could subtract two from the total.  ((4 * (length + 1)) - 2)
> 
> > tcon->nativeFileSystem is a buffer in the specific codepage. If it is
> > ISO 5598-1, e.g., it is fine, because it needs 8 bit (1 byte) per
> > character. If it is UTF-8, and only consists of ASCII (like "NTFS",
> > "FAT32"), it is fine too and only needs one byte per character.
> > But in a worse case (is there any file system containing special
> > characters? I don't know any) the buffer can grow up to 4 bytes per
> > character.
> 
> I know of one proposed file system that has a name that would require
> Unicode (and probably four-byte encoding).  It's only a dream at this point,
> however, so it's not relevant.
> 
> Fun.

Note that we've already been discussing similar problems on-list earlier
this week. See this thread:

[PATCH] cifs: Fix insufficient memory  allocation for nativeFileSystem field

The consensus so far is that the current scheme for handling CIFS
strings is a real mess, and we need some good helper functions that
make this less error prone. I believe Suresh J. is working on patches
and is auditing the existing code.

-- 
Jeff Layton <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.