From: "shugo (Shugo Maeda)" Date: 2013-02-05T22:24:04+09:00 Subject: [ruby-core:51872] [Backport93 - Backport #7786] fix for abstract namespace Issue #7786 has been updated by shugo (Shugo Maeda). File abstract_namespace_fix.diff added usa (Usaku NAKAMURA) wrote: > Q1: Is this related to [Backport #7775] ? It's related, but independent. #7775 is needed to receive the address of a socket correctly. #7776 is needed to specify the address of a socket correctly. > Q2: Can you show the revision of the related change(s) in trunk? r35474, r35479, r38939, r38943, r38963, r38991, and r38994. > Q3: Where the "attached patch"? :) Sorry, I've attached it. ---------------------------------------- Backport #7786: fix for abstract namespace https://bugs.ruby-lang.org/issues/7786#change-35860 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/