From 2b90b1f344b50451673f02ae5ba1291779db544a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bodo=20M=C3=B6ller?= Date: Sat, 10 Nov 2001 10:44:15 +0000 Subject: [PATCH] make code a little more similar to what it looked like before the fixes, call ssl2_part_read again to parse error message --- CHANGES | 2 +- ssl/s2_clnt.c | 21 +++++++++++++++------ ssl/s2_srvr.c | 11 ++++++++--- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index 437c07ec6a..0eec6b3217 100644 --- a/CHANGES +++ b/CHANGES @@ -115,7 +115,7 @@ *) Change ssl/s2_clnt.c and ssl/s3_srvr.c so that received handshake messages are stored in a single piece (fixed-length part and - variable-length part) and fix various bugs found on the way. + variable-length part combined) and fix various bugs found on the way. [Bodo Moeller] *) In ssl3_get_client_hello (ssl/s3_srvr.c), generate a fatal alert diff --git a/ssl/s2_clnt.c b/ssl/s2_clnt.c index 3a990e42cc..868a975dc9 100644 --- a/ssl/s2_clnt.c +++ b/ssl/s2_clnt.c @@ -873,8 +873,8 @@ static int get_server_verify(SSL *s) p=(unsigned char *)s->init_buf->data; if (s->state == SSL2_ST_GET_SERVER_VERIFY_A) { - i=ssl2_read(s,(char *)&(p[s->init_num]),3-s->init_num); - if (i < (3-s->init_num)) + i=ssl2_read(s,(char *)&(p[s->init_num]),1-s->init_num); + if (i < (1-s->init_num)) return(ssl2_part_read(s,SSL_F_GET_SERVER_VERIFY,i)); s->init_num += i; @@ -888,8 +888,12 @@ static int get_server_verify(SSL *s) SSL_R_READ_WRONG_PACKET_TYPE); } else - SSLerr(SSL_F_GET_SERVER_VERIFY, - SSL_R_PEER_ERROR); + { + SSLerr(SSL_F_GET_SERVER_VERIFY,SSL_R_PEER_ERROR); + /* try to read the error message */ + i=ssl2_read(s,(char *)&(p[s->init_num]),3-s->init_num); + return ssl2_part_read(s,SSL_F_GET_SERVER_VERIFY,i); + } return(-1); } } @@ -923,8 +927,8 @@ static int get_server_finished(SSL *s) p=buf; if (s->state == SSL2_ST_GET_SERVER_FINISHED_A) { - i=ssl2_read(s,(char *)&(buf[s->init_num]),3-s->init_num); - if (i < (3-s->init_num)) + i=ssl2_read(s,(char *)&(buf[s->init_num]),1-s->init_num); + if (i < (1-s->init_num)) return(ssl2_part_read(s,SSL_F_GET_SERVER_FINISHED,i)); s->init_num += i; @@ -941,7 +945,12 @@ static int get_server_finished(SSL *s) SSLerr(SSL_F_GET_SERVER_FINISHED,SSL_R_READ_WRONG_PACKET_TYPE); } else + { SSLerr(SSL_F_GET_SERVER_FINISHED,SSL_R_PEER_ERROR); + /* try to read the error message */ + i=ssl2_read(s,(char *)&(p[s->init_num]),3-s->init_num); + return ssl2_part_read(s,SSL_F_GET_SERVER_VERIFY,i); + } return(-1); } s->state=SSL2_ST_GET_SERVER_FINISHED_B; diff --git a/ssl/s2_srvr.c b/ssl/s2_srvr.c index ea07852d1a..58ee38963a 100644 --- a/ssl/s2_srvr.c +++ b/ssl/s2_srvr.c @@ -801,10 +801,10 @@ static int get_client_finished(SSL *s) p=(unsigned char *)s->init_buf->data; if (s->state == SSL2_ST_GET_CLIENT_FINISHED_A) { - i=ssl2_read(s,(char *)&(p[s->init_num]),3-s->init_num); - if (i < 3-s->init_num) + i=ssl2_read(s,(char *)&(p[s->init_num]),1-s->init_num); + if (i < 1-s->init_num) return(ssl2_part_read(s,SSL_F_GET_CLIENT_FINISHED,i)); - s->init_num = 3; + s->init_num += i; if (*p != SSL2_MT_CLIENT_FINISHED) { @@ -814,7 +814,12 @@ static int get_client_finished(SSL *s) SSLerr(SSL_F_GET_CLIENT_FINISHED,SSL_R_READ_WRONG_PACKET_TYPE); } else + { SSLerr(SSL_F_GET_CLIENT_FINISHED,SSL_R_PEER_ERROR); + /* try to read the error message */ + i=ssl2_read(s,(char *)&(p[s->init_num]),3-s->init_num); + return ssl2_part_read(s,SSL_F_GET_SERVER_VERIFY,i); + } return(-1); } s->state=SSL2_ST_GET_CLIENT_FINISHED_B; -- 2.34.1