| Index: openssl/ssl/s2_pkt.c
|
| ===================================================================
|
| --- openssl/ssl/s2_pkt.c (revision 105093)
|
| +++ openssl/ssl/s2_pkt.c (working copy)
|
| @@ -116,7 +116,7 @@
|
| #define USE_SOCKETS
|
|
|
| static int read_n(SSL *s,unsigned int n,unsigned int max,unsigned int extend);
|
| -static int do_ssl_write(SSL *s, const unsigned char *buf, unsigned int len);
|
| +static int n_do_ssl_write(SSL *s, const unsigned char *buf, unsigned int len);
|
| static int write_pending(SSL *s, const unsigned char *buf, unsigned int len);
|
| static int ssl_mt_error(int n);
|
|
|
| @@ -130,7 +130,7 @@
|
| unsigned char mac[MAX_MAC_SIZE];
|
| unsigned char *p;
|
| int i;
|
| - unsigned int mac_size;
|
| + int mac_size;
|
|
|
| ssl2_read_again:
|
| if (SSL_in_init(s) && !s->in_handshake)
|
| @@ -246,7 +246,9 @@
|
| }
|
| else
|
| {
|
| - mac_size=EVP_MD_size(s->read_hash);
|
| + mac_size=EVP_MD_CTX_size(s->read_hash);
|
| + if (mac_size < 0)
|
| + return -1;
|
| OPENSSL_assert(mac_size <= MAX_MAC_SIZE);
|
| s->s2->mac_data=p;
|
| s->s2->ract_data= &p[mac_size];
|
| @@ -261,7 +263,7 @@
|
| /* added a check for length > max_size in case
|
| * encryption was not turned on yet due to an error */
|
| if ((!s->s2->clear_text) &&
|
| - (s->s2->rlength >= mac_size))
|
| + (s->s2->rlength >= (unsigned int)mac_size))
|
| {
|
| ssl2_enc(s,0);
|
| s->s2->ract_data_length-=mac_size;
|
| @@ -447,7 +449,7 @@
|
| n=(len-tot);
|
| for (;;)
|
| {
|
| - i=do_ssl_write(s,&(buf[tot]),n);
|
| + i=n_do_ssl_write(s,&(buf[tot]),n);
|
| if (i <= 0)
|
| {
|
| s->s2->wnum=tot;
|
| @@ -511,9 +513,10 @@
|
| }
|
| }
|
|
|
| -static int do_ssl_write(SSL *s, const unsigned char *buf, unsigned int len)
|
| +static int n_do_ssl_write(SSL *s, const unsigned char *buf, unsigned int len)
|
| {
|
| - unsigned int j,k,olen,p,mac_size,bs;
|
| + unsigned int j,k,olen,p,bs;
|
| + int mac_size;
|
| register unsigned char *pp;
|
|
|
| olen=len;
|
| @@ -529,7 +532,11 @@
|
| if (s->s2->clear_text)
|
| mac_size=0;
|
| else
|
| - mac_size=EVP_MD_size(s->write_hash);
|
| + {
|
| + mac_size=EVP_MD_CTX_size(s->write_hash);
|
| + if (mac_size < 0)
|
| + return -1;
|
| + }
|
|
|
| /* lets set the pad p */
|
| if (s->s2->clear_text)
|
|
|