Annotation of embedaddon/php/ext/openssl/tests/bug48182.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: #48182,ssl handshake fails during asynchronous socket connection
! 3: --SKIPIF--
! 4: <?php
! 5: if (!extension_loaded("openssl")) die("skip, openssl required");
! 6: if (!extension_loaded("pcntl")) die("skip, pcntl required");
! 7: if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
! 8: ?>
! 9: --FILE--
! 10: <?php
! 11:
! 12: function ssl_server($port) {
! 13: $host = 'ssl://127.0.0.1'.':'.$port;
! 14: $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
! 15: $data = "Sending bug48182\n";
! 16:
! 17: $pem = dirname(__FILE__) . '/bug46127.pem';
! 18: $ssl_params = array( 'verify_peer' => false, 'allow_self_signed' => true, 'local_cert' => $pem);
! 19: $ssl = array('ssl' => $ssl_params);
! 20:
! 21: $context = stream_context_create($ssl);
! 22: $sock = stream_socket_server($host, $errno, $errstr, $flags, $context);
! 23: if (!$sock) return false;
! 24:
! 25: $link = stream_socket_accept($sock);
! 26: if (!$link) return false; // bad link?
! 27:
! 28: $r = array($link);
! 29: $w = array();
! 30: $e = array();
! 31: if (stream_select($r, $w, $e, 1, 0) != 0)
! 32: $data .= fread($link, 8192);
! 33:
! 34: $r = array();
! 35: $w = array($link);
! 36: if (stream_select($r, $w, $e, 1, 0) != 0)
! 37: $wrote = fwrite($link, $data, strlen($data));
! 38:
! 39: // close stuff
! 40: fclose($link);
! 41: fclose($sock);
! 42:
! 43: exit;
! 44: }
! 45:
! 46: function ssl_async_client($port) {
! 47: $host = 'ssl://127.0.0.1'.':'.$port;
! 48: $flags = STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT;
! 49: $data = "Sending data over to SSL server in async mode with contents like Hello World\n";
! 50:
! 51: $socket = stream_socket_client($host, $errno, $errstr, 10, $flags);
! 52: stream_set_blocking($socket, 0);
! 53:
! 54: while ($socket && $data) {
! 55: $wrote = fwrite($socket, $data, strlen($data));
! 56: $data = substr($data, $wrote);
! 57: }
! 58:
! 59: $r = array($socket);
! 60: $w = array();
! 61: $e = array();
! 62: if (stream_select($r, $w, $e, 1, 0) != 0)
! 63: {
! 64: $data .= fread($socket, 1024);
! 65: }
! 66:
! 67: echo "$data";
! 68:
! 69: fclose($socket);
! 70: }
! 71:
! 72: echo "Running bug48182\n";
! 73:
! 74: $port = rand(15000, 32000);
! 75:
! 76: $pid = pcntl_fork();
! 77: if ($pid == 0) { // child
! 78: ssl_server($port);
! 79: exit;
! 80: }
! 81:
! 82: // client or failed
! 83: sleep(1);
! 84: ssl_async_client($port);
! 85:
! 86: pcntl_waitpid($pid, $status);
! 87:
! 88: ?>
! 89: --EXPECTF--
! 90: Running bug48182
! 91: Sending bug48182
! 92: Sending data over to SSL server in async mode with contents like Hello World
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>