From: "usa (Usaku NAKAMURA)" Date: 2013-02-05T18:33:14+09:00 Subject: [ruby-core:51871] [Backport93 - Backport #7786] fix for abstract namespace Issue #7786 has been updated by usa (Usaku NAKAMURA). Q1: Is this related to [Backport #7775] ? Q2: Can you show the revision of the related change(s) in trunk? Q3: Where the "attached patch"? :) ---------------------------------------- Backport #7786: fix for abstract namespace https://bugs.ruby-lang.org/issues/7786#change-35858 Author: shugo (Shugo Maeda) Status: Assigned Priority: Normal Assignee: usa (Usaku NAKAMURA) Category: Target version: =begin Please apply the attached patch to Ruby 1.9.3. In Ruby 1.9.3, the addrlen argument for bind(2) and connect(2) is set to sizeof(struct sockaddr_un). However, on Linux, if sun_path starts with NUL, which means that the socket's address is in abstract namespace, the first (addrlen - sizeof(sa_family_t)) bytes of sun_path is used as the name of the socket, so the socket name is filled with extra NULs unintentionally. Please see unix(7) for details. The patch introduces a new function rsock_unix_sockaddr_len() to calculate the correct address length on Linux. Besides that, the patch includes the following changes. * fix Socket.unix_server_socket not to access the file system if the specified name is in abstract namespace. * fix rsock_init_unixsock to use rb_inspect() to avoid ArgumentError in rb_sys_fail_str() when path includes NUL. * support the longest path in sockaddr_un. * This change is necessary for backward compatibility. Without it, the old name filled with extra NULs cannot be specified like UNIXSocket.open(name + "\0" * (108 - name.bytesize)). =end -- http://bugs.ruby-lang.org/