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