105 lines
3.1 KiB
Diff
105 lines
3.1 KiB
Diff
From 45f02e9095f30abefc799b34a612140a47aa9e27 Mon Sep 17 00:00:00 2001
|
|
From: Matt Caswell <matt@openssl.org>
|
|
Date: Tue, 16 Jun 2020 17:19:40 +0100
|
|
Subject: [PATCH 035/147] Add an SSL_dup test
|
|
|
|
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
|
|
(Merged from https://github.com/openssl/openssl/pull/12245)
|
|
---
|
|
test/sslapitest.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 72 insertions(+)
|
|
|
|
diff --git a/test/sslapitest.c b/test/sslapitest.c
|
|
index 62d22e8..5220722 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;
|
|
}
|
|
|
|
--
|
|
1.8.3.1
|
|
|