提交 b8dc9693 编写于 作者: D Dr. Stephen Henson

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.
上级 6ac26a5c
...@@ -271,7 +271,7 @@ static int enc_write(BIO *b, const char *in, int inl) ...@@ -271,7 +271,7 @@ static int enc_write(BIO *b, const char *in, int inl)
if (i <= 0) if (i <= 0)
{ {
BIO_copy_next_retry(b); BIO_copy_next_retry(b);
return(i); return (ret == inl) ? i : ret - inl;
} }
n-=i; n-=i;
ctx->buf_off+=i; ctx->buf_off+=i;
...@@ -325,10 +325,7 @@ again: ...@@ -325,10 +325,7 @@ again:
{ {
i=enc_write(b,NULL,0); i=enc_write(b,NULL,0);
if (i < 0) if (i < 0)
{ return i;
ret=i;
break;
}
} }
if (!ctx->finished) if (!ctx->finished)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册