On Wed, Feb 14, 2007 at 08:38:50AM +0900, Yukihiro Matsumoto wrote:
> In message "Re: [ ruby-Bugs-8597 ] Socket library should support abstract unix sockets"
>     on Wed, 14 Feb 2007 04:24:41 +0900, Sam Roberts <sroberts / uniserve.com> writes:
> 
> |Yes, problem is pack_sockaddr_un() doesn't allow a leading NUL, though
> |Linux allows this (it appears to be a Linux-only extension). Ruby also
> |arbitrarily limits path lengths to UNIX_PATH_MAX-1, instead of
> |UNIX_PATH_MAX.
> 
> Is this OK?  I mean I though sun_path requires NUL termination, so
> that I reserve the last byte for the terminator.  If it's not, I'd
> love to apply your patch.

Since the sockaddr length is passed/returned explicitly in system calls,
I thought it wasn't necessary. I can't find any specification, but
Stevens says it should be NUL terminated, he is probably right.

I noticed there are several other places in socket.c where sun_path is
assumed to be NUL terminated, and to not have a leading NUL - ex,
unixpath() - so this patch is not sufficient.

I will make a new version that makes no change except to specifically
allow a leading NUL, and will check all uses of sun_path to make sure
that leading NULs are treated correctly.

Sam