bug73072.phpt 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. --TEST--
  2. Bug #73072: Invalid path SNI_server_certs causes segfault
  3. --EXTENSIONS--
  4. openssl
  5. --SKIPIF--
  6. <?php
  7. if (!function_exists("proc_open")) die("skip no proc_open");
  8. ?>
  9. --FILE--
  10. <?php
  11. $serverCode = <<<'CODE'
  12. $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN;
  13. $ctx = stream_context_create(['ssl' => [
  14. 'local_cert' => __DIR__ . '/domain1.pem',
  15. 'SNI_server_certs' => [
  16. "domain1.com" => __DIR__ . "/sni_server_domain1.pem",
  17. "domain2.com" => __DIR__ . "/not_existing.pem",
  18. ]
  19. ]]);
  20. $server = stream_socket_server('tls://127.0.0.1:64322', $errno, $errstr, $flags, $ctx);
  21. phpt_notify();
  22. @stream_socket_accept($server, 3);
  23. // if there is a segfault, this won't be called
  24. fwrite(STDERR, "done\n");
  25. CODE;
  26. $clientCode = <<<'CODE'
  27. $flags = STREAM_CLIENT_CONNECT;
  28. $ctxArr = [
  29. 'cafile' => __DIR__ . '/sni_server_ca.pem',
  30. 'capture_peer_cert' => true
  31. ];
  32. phpt_wait();
  33. $ctxArr['peer_name'] = 'domain1.com';
  34. $ctx = stream_context_create(['ssl' => $ctxArr]);
  35. @stream_socket_client("tls://127.0.0.1:64322", $errno, $errstr, 1, $flags, $ctx);
  36. CODE;
  37. include 'ServerClientTestCase.inc';
  38. ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
  39. ?>
  40. --EXPECT--
  41. done