diff options
author | Matt Caswell <matt@openssl.org> | 2016-11-15 16:31:26 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-11-16 10:27:40 +0000 |
commit | e304d3e20f45243f9e643607edfe4db49c329596 (patch) | |
tree | 1e176628375cc56adb05623203ac42b6f8265546 /test/ssltest_old.c | |
parent | 5a2443aee4c1bf583d19a2c5f68b87b52dcece7f (diff) | |
download | openssl-e304d3e20f45243f9e643607edfe4db49c329596.tar.gz |
Remove a hack from ssl_test_old
ssl_test_old was reaching inside the SSL structure and changing the internal
BIO values. This is completely unneccessary, and was causing an abort in the
test when enabling TLSv1.3.
I also removed the need for ssl_test_old to include ssl_locl.h. This
required the addition of some missing accessors for SSL_COMP name and id
fields.
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'test/ssltest_old.c')
-rw-r--r-- | test/ssltest_old.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/test/ssltest_old.c b/test/ssltest_old.c index 356359d4e3..c19ab98de0 100644 --- a/test/ssltest_old.c +++ b/test/ssltest_old.c @@ -92,8 +92,6 @@ # include <openssl/ct.h> #endif -#include "../ssl/ssl_locl.h" - /* * Or gethostname won't be declared properly * on Compaq platforms (at least with DEC C). @@ -1430,7 +1428,7 @@ int main(int argc, char *argv[]) printf("Available compression methods:"); for (j = 0; j < n; j++) { SSL_COMP *c = sk_SSL_COMP_value(ssl_comp_methods, j); - printf(" %s:%d", c->name, c->id); + printf(" %s:%d", SSL_COMP_get0_name(c), SSL_COMP_get_id(c)); } printf("\n"); } @@ -2676,8 +2674,29 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count) SSL_set_max_send_fragment(c_ssl, max_frag); BIO_set_ssl(c_bio, c_ssl, BIO_NOCLOSE); + /* + * We've just given our ref to these BIOs to c_ssl. We need another one to + * give to s_ssl + */ + if (!BIO_up_ref(c_to_s)) { + /* c_to_s and s_to_c will get freed when we free c_ssl */ + c_to_s = NULL; + s_to_c = NULL; + goto err; + } + if (!BIO_up_ref(s_to_c)) { + /* s_to_c will get freed when we free c_ssl */ + s_to_c = NULL; + goto err; + } + SSL_set_accept_state(s_ssl); SSL_set_bio(s_ssl, c_to_s, s_to_c); + + /* We've used up all our refs to these now */ + c_to_s = NULL; + s_to_c = NULL; + SSL_set_max_send_fragment(s_ssl, max_frag); BIO_set_ssl(s_bio, s_ssl, BIO_NOCLOSE); @@ -2890,23 +2909,6 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count) } ret = 0; err: - /* - * We have to set the BIO's to NULL otherwise they will be - * OPENSSL_free()ed twice. Once when th s_ssl is SSL_free()ed and again - * when c_ssl is SSL_free()ed. This is a hack required because s_ssl and - * c_ssl are sharing the same BIO structure and SSL_set_bio() and - * SSL_free() automatically BIO_free non NULL entries. You should not - * normally do this or be required to do this - */ - if (s_ssl != NULL) { - s_ssl->rbio = NULL; - s_ssl->wbio = NULL; - } - if (c_ssl != NULL) { - c_ssl->rbio = NULL; - c_ssl->wbio = NULL; - } - BIO_free(c_to_s); BIO_free(s_to_c); BIO_free_all(c_bio); |