Commit a6ec2d58 authored by Bodo Möller's avatar Bodo Möller
Browse files

improve binary compatibility

parent 82c77c1b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -584,7 +584,7 @@ int ssl3_setup_buffers(SSL *s)
		if ((p=OPENSSL_malloc(len)) == NULL)
			goto err;
		s->s3->rbuf.buf = p;
		s->s3->rbuf.len = len;
		s->s3->rbuf_len = len;
		}

	if (s->s3->wbuf.buf == NULL)
@@ -594,7 +594,7 @@ int ssl3_setup_buffers(SSL *s)
		if ((p=OPENSSL_malloc(len)) == NULL)
			goto err;
		s->s3->wbuf.buf = p;
		s->s3->wbuf.len = len;
		s->s3->wbuf_len = len;
		}
	s->packet= &(s->s3->rbuf.buf[0]);
	return(1);
+4 −4
Original line number Diff line number Diff line
@@ -758,14 +758,14 @@ void ssl3_clear(SSL *s)

	rp = s->s3->rbuf.buf;
	wp = s->s3->wbuf.buf;
	rlen = s->s3->rbuf.len;
	wlen = s->s3->wbuf.len;
	rlen = s->s3->rbuf_len;
	wlen = s->s3->wbuf_len;

	memset(s->s3,0,sizeof *s->s3);
	s->s3->rbuf.buf = rp;
	s->s3->wbuf.buf = wp;
	s->s3->rbuf.len = rlen;
	s->s3->wbuf.len = wlen;
	s->s3->rbuf_len = rlen;
	s->s3->wbuf_len = wlen;

	ssl_free_wbio_buffer(s);

+4 −4
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ static int ssl3_read_n(SSL *s, int n, int max, int extend)

	{
		/* 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)
			max = max_max;
	}
@@ -245,7 +245,7 @@ static int ssl3_get_record(SSL *s)
		extra=SSL3_RT_MAX_EXTRA;
	else
		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
		 * set after ssl3_setup_buffers() was done */
@@ -258,7 +258,7 @@ again:
	if (	(s->rstate != SSL_ST_READ_BODY) ||
		(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 */
		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)
				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 */
				SSLerr(SSL_F_DO_SSL3_WRITE, SSL_R_INTERNAL_ERROR);
+6 −15
Original line number Diff line number Diff line
@@ -252,19 +252,13 @@ typedef struct ssl3_record_st
/*r */	unsigned char *comp;    /* only used with decompression - malloc()ed */
	} 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
	{
	unsigned char *buf;     /* at least SSL3_RT_MAX_PACKET_SIZE bytes,
	                         * 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 */
#endif
	int offset;             /* where to 'copy from' */
	int left;               /* how many bytes left */
	} SSL3_BUFFER;
@@ -296,11 +290,8 @@ typedef struct ssl3_state_st
	unsigned char server_random[SSL3_RANDOM_SIZE];
	unsigned char client_random[SSL3_RANDOM_SIZE];

	/* dummies for best possible binary compatibility within 0.9.6 series
	 * (indexes to other struct members should remain unchanged);
	 * real 'rbuf' and 'wbuf' are added at the end of this struct */
	DUMMY_SSL3_BUFFER dummy_rbuf;
	DUMMY_SSL3_BUFFER dummy_wbuf;
	SSL3_BUFFER rbuf;	/* read IO goes into here */
	SSL3_BUFFER wbuf;	/* write IO goes into here */

	SSL3_RECORD rrec;	/* each decoded record goes in here */
	SSL3_RECORD wrec;	/* goes out from here */
@@ -390,8 +381,8 @@ typedef struct ssl3_state_st
	int need_empty_fragments;
	int empty_fragment_done;

	SSL3_BUFFER rbuf;	/* read IO goes into here */
	SSL3_BUFFER wbuf;	/* write IO goes into here */
	size_t rbuf_len;	/* substitute for rbuf.len */
	size_t wbuf_len;	/* substitute for wbuf.len */

	} SSL3_STATE;