Commit 3105d695 authored by Matt Caswell's avatar Matt Caswell
Browse files

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: default avatarRichard Levitte <levitte@openssl.org>
parent 2e66d3d6
Loading
Loading
Loading
Loading
+7 −8
Original line number Original line Diff line number Diff line
@@ -627,15 +627,14 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
        break;
        break;


    case BIO_CTRL_EOF:
    case BIO_CTRL_EOF:
        {
        if (b->peer != NULL) {
            BIO *other_bio = ptr;
            struct bio_bio_st *peer_b = b->peer->ptr;

            if (other_bio) {
                struct bio_bio_st *other_b = other_bio->ptr;


                assert(other_b != NULL);
            if (peer_b->len == 0 && peer_b->closed)
                ret = other_b->len == 0 && other_b->closed;
                ret = 1;
            } else
            else
                ret = 0;
        } else {
            ret = 1;
            ret = 1;
        }
        }
        break;
        break;
+3 −0
Original line number Original line Diff line number Diff line
@@ -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
before flushing the write buffer it will never succeed because the request was
never sent!
never sent!


BIO_eof() is true if no data is in the peer BIO and the peer BIO has been
shutdown.

=head1 RETURN VALUES
=head1 RETURN VALUES


BIO_new_bio_pair() returns 1 on success, with the new BIOs available in
BIO_new_bio_pair() returns 1 on success, with the new BIOs available in