Commit 5c168710 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Update from 1.0.0-stable.

parent 6053ef80
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -561,7 +561,12 @@ again:
		/* read timeout is handled by dtls1_read_bytes */
		if (n <= 0) return(n); /* error or non-blocking */

		OPENSSL_assert(s->packet_length == DTLS1_RT_HEADER_LENGTH);
		/* this packet contained a partial record, dump it */
		if (s->packet_length != DTLS1_RT_HEADER_LENGTH)
			{
			s->packet_length = 0;
			goto again;
			}

		s->rstate=SSL_ST_READ_BODY;

+24 −8
Original line number Diff line number Diff line
@@ -176,9 +176,10 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
		/* ... now we can act as if 'extend' was set */
		}

	/* extend reads should not span multiple packets for DTLS */
	if ( (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER)
	     &&	extend)
	/* For DTLS/UDP reads should not span multiple packets
	 * because the read operation returns the whole packet
	 * at once (as long as it fits into the buffer). */
	if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER)
		{
		if (left > 0 && n > left)
			n = left;
@@ -207,15 +208,22 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
		rb->offset = len + align;
		}

	max = rb->len - rb->offset;
	if (n > max) /* does not happen */
	if (n > rb->len - rb->offset) /* does not happen */
		{
		SSLerr(SSL_F_SSL3_READ_N,ERR_R_INTERNAL_ERROR);
		return -1;
		}

	if (!s->read_ahead)
		/* ignore max parameter */
		max = n;
	else
		{
		if (max < n)
			max = n;
		if (max > rb->len - rb->offset)
			max = rb->len - rb->offset;
		}

	while (left < n)
		{
@@ -244,6 +252,14 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
			return(i);
			}
		left+=i;
		/* reads should *never* span multiple packets for DTLS because
		 * the underlying transport protocol is message oriented as opposed
		 * to byte oriented as in the TLS case. */
		if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER)
			{
			if (n > left)
				n = left; /* makes the while condition false */
			}
		}

	/* done reading, now the book-keeping */