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

Encryption BIOs misbehave when used with non blocking I/O.

Two fixes:

1. If BIO_write() fails inside enc_write() it should return the
   total number of bytes successfully written.

2. If BIO_write() fails during BIO_flush() it should return immediately
   with the error code: previously it would fall through to the final
   encrypt, corrupting the buffer.
parent 6ac26a5c
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -271,7 +271,7 @@ static int enc_write(BIO *b, const char *in, int inl)
			if (i <= 0)
				{
				BIO_copy_next_retry(b);
				return(i);
				return (ret == inl) ? i : ret - inl;
				}
			n-=i;
			ctx->buf_off+=i;
@@ -325,10 +325,7 @@ again:
			{
			i=enc_write(b,NULL,0);
			if (i < 0)
				{
				ret=i;
				break;
				}
				return i;
			}

		if (!ctx->finished)