Fix BIO_eof() for BIO pairs

BIO_eof() was always returning true when using a BIO pair. It should only
be true if the peer BIO is empty and has been shutdown.

RT#1215

Reviewed-by: Richard Levitte <levitte@openssl.org>
master
Matt Caswell 7 years ago
parent 2e66d3d674
commit 3105d69535

@ -627,16 +627,15 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
break;
case BIO_CTRL_EOF:
{
BIO *other_bio = ptr;
if (other_bio) {
struct bio_bio_st *other_b = other_bio->ptr;
if (b->peer != NULL) {
struct bio_bio_st *peer_b = b->peer->ptr;
assert(other_b != NULL);
ret = other_b->len == 0 && other_b->closed;
} else
if (peer_b->len == 0 && peer_b->closed)
ret = 1;
else
ret = 0;
} else {
ret = 1;
}
break;

@ -120,6 +120,9 @@ the application then waits for data to be available on the underlying transport
before flushing the write buffer it will never succeed because the request was
never sent!
BIO_eof() is true if no data is in the peer BIO and the peer BIO has been
shutdown.
=head1 RETURN VALUES
BIO_new_bio_pair() returns 1 on success, with the new BIOs available in

Loading…
Cancel
Save