summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2016-09-29 15:14:33 +0100
committerMatt Caswell <matt@openssl.org>2016-09-29 17:07:45 +0100
commit4346a8faa7dd660c053c8e65b9e566b6c934f010 (patch)
tree7a85d948068339d0300644e44a07d316fbbf59c6 /ssl
parentb1b4f0a5807d0462067a39daf39eb8bccd3bca2b (diff)
Convert SeverDone construction to WPACKET
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'ssl')
-rw-r--r--ssl/statem/statem_srvr.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
index eae0e3cadc..e361738f27 100644
--- a/ssl/statem/statem_srvr.c
+++ b/ssl/statem/statem_srvr.c
@@ -1572,19 +1572,26 @@ int tls_construct_server_hello(SSL *s)
int tls_construct_server_done(SSL *s)
{
- if (!ssl_set_handshake_header(s, SSL3_MT_SERVER_DONE, 0)) {
+ WPACKET pkt;
+
+ if (!WPACKET_init(&pkt, s->init_buf)
+ || !ssl_set_handshake_header2(s, &pkt, SSL3_MT_SERVER_DONE)
+ || !ssl_close_construct_packet(s, &pkt)) {
SSLerr(SSL_F_TLS_CONSTRUCT_SERVER_DONE, ERR_R_INTERNAL_ERROR);
- ossl_statem_set_error(s);
- return 0;
+ goto err;
}
if (!s->s3->tmp.cert_request) {
- if (!ssl3_digest_cached_records(s, 0)) {
- ossl_statem_set_error(s);
- }
+ if (!ssl3_digest_cached_records(s, 0))
+ goto err;
}
-
return 1;
+
+ err:
+ WPACKET_cleanup(&pkt);
+ ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+ ossl_statem_set_error(s);
+ return 0;
}
int tls_construct_server_key_exchange(SSL *s)