Fix for BIO pairs.
[openssl.git] / crypto / bio / bss_bio.c
index 5b60f54..0ad55e0 100644 (file)
@@ -46,7 +46,8 @@ struct bio_bio_st
 {
        BIO *peer;     /* NULL if buf == NULL.
                                        * If peer != NULL, then peer->ptr is also a bio_bio_st,
-                                       * and its "peer" member points back to us. */
+                                       * and its "peer" member points back to us.
+                                       * peer != NULL iff init != 0 in the BIO. */
        
        /* This is for what we write (i.e. reading uses peer's struct): */
        int closed;    /* valid iff peer != NULL */
@@ -197,7 +198,7 @@ static int bio_make_pair(BIO *bio1, BIO *bio2)
                return 0;
                }
        
-       if (b1->buf != NULL)
+       if (b1->buf == NULL)
                {
                b1->buf = Malloc(b1->size);
                if (b1->buf == NULL)
@@ -209,7 +210,7 @@ static int bio_make_pair(BIO *bio1, BIO *bio2)
                b1->offset = 0;
                }
        
-       if (b2->buf != NULL)
+       if (b2->buf == NULL)
                {
                b2->buf = Malloc(b2->size);
                if (b2->buf == NULL)
@@ -224,6 +225,9 @@ static int bio_make_pair(BIO *bio1, BIO *bio2)
        b1->peer = bio2;
        b2->peer = bio1;
 
+       bio1->init = 1;
+       bio2->init = 1;
+
        return 1;
        }