From: Matt Caswell Date: Tue, 16 Jun 2020 16:19:40 +0000 (+0100) Subject: Add an SSL_dup test X-Git-Tag: OpenSSL_1_1_1h~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=45f02e9095f30abefc799b34a612140a47aa9e27;p=thirdparty%2Fopenssl.git Add an SSL_dup test Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/12245) --- diff --git a/test/sslapitest.c b/test/sslapitest.c index 62d22e85b01..52207226f46 100644 --- a/test/sslapitest.c +++ b/test/sslapitest.c @@ -6578,6 +6578,75 @@ static int test_servername(int tst) return testresult; } +#ifndef OPENSSL_NO_TLS1_2 +static int test_ssl_dup(void) +{ + SSL_CTX *cctx = NULL, *sctx = NULL; + SSL *clientssl = NULL, *serverssl = NULL, *client2ssl = NULL; + int testresult = 0; + BIO *rbio = NULL, *wbio = NULL; + + if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), + TLS_client_method(), + 0, + 0, + &sctx, &cctx, cert, privkey))) + goto end; + + if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, + NULL, NULL))) + goto end; + + if (!TEST_true(SSL_set_min_proto_version(clientssl, TLS1_2_VERSION)) + || !TEST_true(SSL_set_max_proto_version(clientssl, TLS1_2_VERSION))) + goto end; + + client2ssl = SSL_dup(clientssl); + rbio = SSL_get_rbio(clientssl); + if (!TEST_ptr(rbio) + || !TEST_true(BIO_up_ref(rbio))) + goto end; + SSL_set0_rbio(client2ssl, rbio); + rbio = NULL; + + wbio = SSL_get_wbio(clientssl); + if (!TEST_ptr(wbio) || !TEST_true(BIO_up_ref(wbio))) + goto end; + SSL_set0_wbio(client2ssl, wbio); + rbio = NULL; + + if (!TEST_ptr(client2ssl) + /* Handshake not started so pointers should be different */ + || !TEST_ptr_ne(clientssl, client2ssl)) + goto end; + + if (!TEST_int_eq(SSL_get_min_proto_version(client2ssl), TLS1_2_VERSION) + || !TEST_int_eq(SSL_get_max_proto_version(client2ssl), TLS1_2_VERSION)) + goto end; + + if (!TEST_true(create_ssl_connection(serverssl, client2ssl, SSL_ERROR_NONE))) + goto end; + + SSL_free(clientssl); + clientssl = SSL_dup(client2ssl); + if (!TEST_ptr(clientssl) + /* Handshake has finished so pointers should be the same */ + || !TEST_ptr_eq(clientssl, client2ssl)) + goto end; + + testresult = 1; + + end: + SSL_free(serverssl); + SSL_free(clientssl); + SSL_free(client2ssl); + SSL_CTX_free(sctx); + SSL_CTX_free(cctx); + + return testresult; +} +#endif + int setup_tests(void) { if (!TEST_ptr(certsdir = test_get_argument(0)) @@ -6698,6 +6767,9 @@ int setup_tests(void) ADD_ALL_TESTS(test_client_cert_cb, 2); ADD_ALL_TESTS(test_ca_names, 3); ADD_ALL_TESTS(test_servername, 10); +#ifndef OPENSSL_NO_TLS1_2 + ADD_TEST(test_ssl_dup); +#endif return 1; }