Fix unpack of abstract socket addrs with nul byte
authorLubomir Rintel <lkundrak@v3.sk>
Mon, 31 Aug 2009 09:45:23 +0000 (11:45 +0200)
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Mon, 31 Aug 2009 20:02:47 +0000 (22:02 +0200)
commit89904c08923161afd23c629d5c2c7472a09c16bb
tree29ebe50a59178ecf59cfc9e90683423aae9c9fc9
parentcdab9eb9f4a609665cca826dbf612dd2fc05a19b
Fix unpack of abstract socket addrs with nul byte

Addresses of Linux abstract namespace sockets are not nul-terminated C
strings, but rather an arbitrary character arrays. According to unix(7)
documentation from Linux, "Null bytes in the name have  no special
significance."

unpack_sockaddr_un() was just throwing the initial nul byte away and
then treating the rest like ordinary C string when computing the length
of the address, which was wrong. This fix utilizes the length of the PV
for addresses starting with nul instead.

The regression test was extended with check for the problem.
ext/Socket/Socket.xs
ext/Socket/t/Socket.t [changed mode: 0644->0755]