|
| 1 | +--TEST-- |
| 2 | +GH-22617: Persistent abstract unix domain sockets resolved to wrong resource |
| 3 | +--CREDITS-- |
| 4 | +Roysten |
| 5 | +--SKIPIF-- |
| 6 | +<?php |
| 7 | +if (PHP_OS_FAMILY !== "Linux") die("skip abstract unix domain sockets are Linux-only"); |
| 8 | +if (!function_exists("pfsockopen")) die("skip pfsockopen() not available"); |
| 9 | +?> |
| 10 | +--FILE-- |
| 11 | +<?php |
| 12 | +// Abstract sockets: the address is prefixed with a null byte. |
| 13 | +$name1 = "gh22617_" . getmypid() . "_1"; |
| 14 | +$name2 = "gh22617_" . getmypid() . "_2"; |
| 15 | + |
| 16 | +$server1 = stream_socket_server("unix://\0$name1", $errno, $errstr); |
| 17 | +$server2 = stream_socket_server("unix://\0$name2", $errno, $errstr); |
| 18 | +var_dump($server1 !== false, $server2 !== false); |
| 19 | + |
| 20 | +// Connect to the first abstract socket. |
| 21 | +$socket1 = pfsockopen("unix://\0$name1", 0, $errno1, $errstr1); |
| 22 | +var_dump($socket1 !== false); |
| 23 | +var_dump(get_resource_type($socket1)); |
| 24 | + |
| 25 | +// Connect to the second abstract socket. |
| 26 | +$socket2 = pfsockopen("unix://\0$name2", 0, $errno2, $errstr2); |
| 27 | +var_dump($socket2 !== false); |
| 28 | +var_dump(get_resource_type($socket2)); |
| 29 | + |
| 30 | +// The two distinct abstract sockets must resolve to distinct resources. |
| 31 | +var_dump((int) $socket1 !== (int) $socket2); |
| 32 | + |
| 33 | +fclose($socket1); |
| 34 | +fclose($socket2); |
| 35 | +fclose($server1); |
| 36 | +fclose($server2); |
| 37 | +?> |
| 38 | +--EXPECT-- |
| 39 | +bool(true) |
| 40 | +bool(true) |
| 41 | +bool(true) |
| 42 | +string(17) "persistent stream" |
| 43 | +bool(true) |
| 44 | +string(17) "persistent stream" |
| 45 | +bool(true) |
0 commit comments