]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Stop using BIO_read_ex()
authorAlberto Leiva Popper <ydahhrk@gmail.com>
Wed, 22 May 2024 01:50:57 +0000 (19:50 -0600)
committerAlberto Leiva Popper <ydahhrk@gmail.com>
Wed, 22 May 2024 01:50:57 +0000 (19:50 -0600)
It's not LibreSSL-compatible.

src/print_file.c
src/types/bio_seq.c

index 423e68e7379bb2da63e225ca33020299db9482d3..404cd4ac6992491b9bd0ceda19ed039f7ecd28dc 100644 (file)
@@ -136,15 +136,16 @@ static int
 guess_file_type(BIO **bio, unsigned char *hdrbuf)
 {
        unsigned char *ptr;
-       size_t consumed;
+       int res;
 
        if (config_get_file_type() != FT_UNK)
                return config_get_file_type();
 
-       if (!BIO_read_ex(*bio, hdrbuf, HDRSIZE, &consumed))
+       res = BIO_read(*bio, hdrbuf, HDRSIZE);
+       if (res <= 0)
                return op_crypto_err("Cannot guess file type; IO error.");
 
-       *bio = BIO_new_seq(BIO_new_mem_buf(hdrbuf, consumed), *bio);
+       *bio = BIO_new_seq(BIO_new_mem_buf(hdrbuf, res), *bio);
        if ((*bio) == NULL)
                return op_crypto_err("BIO_new_seq() returned NULL.");
 
@@ -197,20 +198,21 @@ bio2ci(BIO *bio)
 #define BUFFER_SIZE 4096
        struct ContentInfo *ci = NULL;
        unsigned char buffer[BUFFER_SIZE];
-       size_t consumed;
-       asn_dec_rval_t res;
+       int res1;
+       asn_dec_rval_t res2;
 
        do {
-               if (!BIO_read_ex(bio, buffer, BUFFER_SIZE, &consumed)) {
+               res1 = BIO_read(bio, buffer, BUFFER_SIZE);
+               if (res1 <= 0) {
                        op_crypto_err("IO error.");
                        goto fail;
                }
 
-               res = ber_decode(&asn_DEF_ContentInfo, (void **)&ci,
-                                buffer, consumed);
-               pr_op_debug("Consumed: %zu", res.consumed);
+               res2 = ber_decode(&asn_DEF_ContentInfo, (void **)&ci,
+                                 buffer, res1);
+               pr_op_debug("Consumed: %zu", res2.consumed);
 
-               switch (res.code) {
+               switch (res2.code) {
                case RC_OK:
                        return ci;
 
index 3f68c986b9ea72749092b29a24d55097b19cdaa0..6af91572e61d8f93dacdb7fe7fe2fd956e22f50e 100644 (file)
@@ -11,21 +11,22 @@ struct bioseq_priv {
 };
 
 static int
-bioseq_read_ex(BIO *bio, char *data, size_t len, size_t *consumed)
+bioseq_read(BIO *bio, char *data, int len)
 {
        struct bioseq_priv *priv = BIO_get_data(bio);
        int res;
 
        if (priv->prefix != NULL) {
-               res = BIO_read_ex(priv->prefix, data, len, consumed);
-               if (res == 1 && BIO_eof(priv->prefix)) {
+               res = BIO_read(priv->prefix, data, len);
+               if (BIO_eof(priv->prefix) || res <= 0) {
                        BIO_free_all(priv->prefix);
                        priv->prefix = NULL;
+                       return res;
                }
                return res;
        }
 
-       return BIO_read_ex(priv->suffix, data, len, consumed);
+       return BIO_read(priv->suffix, data, len);
 }
 
 static int
@@ -60,7 +61,7 @@ bioseq_setup(void)
        if (method == NULL)
                return op_crypto_err("BIO_meth_new() returned NULL.");
 
-       if (!BIO_meth_set_read_ex(method, bioseq_read_ex) ||
+       if (!BIO_meth_set_read(method, bioseq_read) ||
            !BIO_meth_set_destroy(method, bioseq_destroy)) {
                BIO_meth_free(method);
                method = NULL;