mirror of
https://github.com/QuasarApp/openssl.git
synced 2025-05-18 20:39:42 +00:00
improve binary compatibility
This commit is contained in:
parent
82c77c1b32
commit
a6ec2d58ba
@ -584,7 +584,7 @@ int ssl3_setup_buffers(SSL *s)
|
|||||||
if ((p=OPENSSL_malloc(len)) == NULL)
|
if ((p=OPENSSL_malloc(len)) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
s->s3->rbuf.buf = p;
|
s->s3->rbuf.buf = p;
|
||||||
s->s3->rbuf.len = len;
|
s->s3->rbuf_len = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->s3->wbuf.buf == NULL)
|
if (s->s3->wbuf.buf == NULL)
|
||||||
@ -594,7 +594,7 @@ int ssl3_setup_buffers(SSL *s)
|
|||||||
if ((p=OPENSSL_malloc(len)) == NULL)
|
if ((p=OPENSSL_malloc(len)) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
s->s3->wbuf.buf = p;
|
s->s3->wbuf.buf = p;
|
||||||
s->s3->wbuf.len = len;
|
s->s3->wbuf_len = len;
|
||||||
}
|
}
|
||||||
s->packet= &(s->s3->rbuf.buf[0]);
|
s->packet= &(s->s3->rbuf.buf[0]);
|
||||||
return(1);
|
return(1);
|
||||||
|
@ -758,14 +758,14 @@ void ssl3_clear(SSL *s)
|
|||||||
|
|
||||||
rp = s->s3->rbuf.buf;
|
rp = s->s3->rbuf.buf;
|
||||||
wp = s->s3->wbuf.buf;
|
wp = s->s3->wbuf.buf;
|
||||||
rlen = s->s3->rbuf.len;
|
rlen = s->s3->rbuf_len;
|
||||||
wlen = s->s3->wbuf.len;
|
wlen = s->s3->wbuf_len;
|
||||||
|
|
||||||
memset(s->s3,0,sizeof *s->s3);
|
memset(s->s3,0,sizeof *s->s3);
|
||||||
s->s3->rbuf.buf = rp;
|
s->s3->rbuf.buf = rp;
|
||||||
s->s3->wbuf.buf = wp;
|
s->s3->wbuf.buf = wp;
|
||||||
s->s3->rbuf.len = rlen;
|
s->s3->rbuf_len = rlen;
|
||||||
s->s3->wbuf.len = wlen;
|
s->s3->wbuf_len = wlen;
|
||||||
|
|
||||||
ssl_free_wbio_buffer(s);
|
ssl_free_wbio_buffer(s);
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ static int ssl3_read_n(SSL *s, int n, int max, int extend)
|
|||||||
|
|
||||||
{
|
{
|
||||||
/* avoid buffer overflow */
|
/* avoid buffer overflow */
|
||||||
int max_max = s->s3->rbuf.len - s->packet_length;
|
int max_max = s->s3->rbuf_len - s->packet_length;
|
||||||
if (max > max_max)
|
if (max > max_max)
|
||||||
max = max_max;
|
max = max_max;
|
||||||
}
|
}
|
||||||
@ -245,7 +245,7 @@ static int ssl3_get_record(SSL *s)
|
|||||||
extra=SSL3_RT_MAX_EXTRA;
|
extra=SSL3_RT_MAX_EXTRA;
|
||||||
else
|
else
|
||||||
extra=0;
|
extra=0;
|
||||||
if (extra != (s->s3->rbuf.len - SSL3_RT_MAX_PACKET_SIZE))
|
if (extra != (s->s3->rbuf_len - SSL3_RT_MAX_PACKET_SIZE))
|
||||||
{
|
{
|
||||||
/* actually likely an application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER
|
/* actually likely an application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER
|
||||||
* set after ssl3_setup_buffers() was done */
|
* set after ssl3_setup_buffers() was done */
|
||||||
@ -258,7 +258,7 @@ again:
|
|||||||
if ( (s->rstate != SSL_ST_READ_BODY) ||
|
if ( (s->rstate != SSL_ST_READ_BODY) ||
|
||||||
(s->packet_length < SSL3_RT_HEADER_LENGTH))
|
(s->packet_length < SSL3_RT_HEADER_LENGTH))
|
||||||
{
|
{
|
||||||
n=ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0);
|
n=ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf_len, 0);
|
||||||
if (n <= 0) return(n); /* error or non-blocking */
|
if (n <= 0) return(n); /* error or non-blocking */
|
||||||
s->rstate=SSL_ST_READ_BODY;
|
s->rstate=SSL_ST_READ_BODY;
|
||||||
|
|
||||||
@ -605,7 +605,7 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
|
|||||||
if (prefix_len <= 0)
|
if (prefix_len <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (s->s3->wbuf.len < prefix_len + SSL3_RT_MAX_PACKET_SIZE)
|
if (s->s3->wbuf_len < prefix_len + SSL3_RT_MAX_PACKET_SIZE)
|
||||||
{
|
{
|
||||||
/* insufficient space */
|
/* insufficient space */
|
||||||
SSLerr(SSL_F_DO_SSL3_WRITE, SSL_R_INTERNAL_ERROR);
|
SSLerr(SSL_F_DO_SSL3_WRITE, SSL_R_INTERNAL_ERROR);
|
||||||
|
21
ssl/ssl3.h
21
ssl/ssl3.h
@ -252,19 +252,13 @@ typedef struct ssl3_record_st
|
|||||||
/*r */ unsigned char *comp; /* only used with decompression - malloc()ed */
|
/*r */ unsigned char *comp; /* only used with decompression - malloc()ed */
|
||||||
} SSL3_RECORD;
|
} SSL3_RECORD;
|
||||||
|
|
||||||
/* 'dummy' variant for binary compatibility ... */
|
|
||||||
typedef struct dummy_ssl3_buffer_st
|
|
||||||
{
|
|
||||||
unsigned char *buf; /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
|
|
||||||
* see ssl3_setup_buffers() */
|
|
||||||
int offset; /* where to 'copy from' */
|
|
||||||
int left; /* how many bytes left */
|
|
||||||
} DUMMY_SSL3_BUFFER;
|
|
||||||
typedef struct ssl3_buffer_st
|
typedef struct ssl3_buffer_st
|
||||||
{
|
{
|
||||||
unsigned char *buf; /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
|
unsigned char *buf; /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
|
||||||
* see ssl3_setup_buffers() */
|
* see ssl3_setup_buffers() */
|
||||||
|
#if 0 /* put directly into SSL3_STATE for best possible binary compatibility within 0.9.6 series */
|
||||||
size_t len; /* buffer size */
|
size_t len; /* buffer size */
|
||||||
|
#endif
|
||||||
int offset; /* where to 'copy from' */
|
int offset; /* where to 'copy from' */
|
||||||
int left; /* how many bytes left */
|
int left; /* how many bytes left */
|
||||||
} SSL3_BUFFER;
|
} SSL3_BUFFER;
|
||||||
@ -296,11 +290,8 @@ typedef struct ssl3_state_st
|
|||||||
unsigned char server_random[SSL3_RANDOM_SIZE];
|
unsigned char server_random[SSL3_RANDOM_SIZE];
|
||||||
unsigned char client_random[SSL3_RANDOM_SIZE];
|
unsigned char client_random[SSL3_RANDOM_SIZE];
|
||||||
|
|
||||||
/* dummies for best possible binary compatibility within 0.9.6 series
|
SSL3_BUFFER rbuf; /* read IO goes into here */
|
||||||
* (indexes to other struct members should remain unchanged);
|
SSL3_BUFFER wbuf; /* write IO goes into here */
|
||||||
* real 'rbuf' and 'wbuf' are added at the end of this struct */
|
|
||||||
DUMMY_SSL3_BUFFER dummy_rbuf;
|
|
||||||
DUMMY_SSL3_BUFFER dummy_wbuf;
|
|
||||||
|
|
||||||
SSL3_RECORD rrec; /* each decoded record goes in here */
|
SSL3_RECORD rrec; /* each decoded record goes in here */
|
||||||
SSL3_RECORD wrec; /* goes out from here */
|
SSL3_RECORD wrec; /* goes out from here */
|
||||||
@ -390,8 +381,8 @@ typedef struct ssl3_state_st
|
|||||||
int need_empty_fragments;
|
int need_empty_fragments;
|
||||||
int empty_fragment_done;
|
int empty_fragment_done;
|
||||||
|
|
||||||
SSL3_BUFFER rbuf; /* read IO goes into here */
|
size_t rbuf_len; /* substitute for rbuf.len */
|
||||||
SSL3_BUFFER wbuf; /* write IO goes into here */
|
size_t wbuf_len; /* substitute for wbuf.len */
|
||||||
|
|
||||||
} SSL3_STATE;
|
} SSL3_STATE;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user