From d07aee2c7a33e77d97d8e13811af3637e3849cb2 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Mon, 5 Sep 2016 17:26:58 +0100 Subject: Create BIO_read_ex() which handles size_t arguments Also extend BIO_METHOD to be able to supply an implementation for the new BIO_read function. Reviewed-by: Richard Levitte --- crypto/bio/bio_meth.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'crypto/bio/bio_meth.c') diff --git a/crypto/bio/bio_meth.c b/crypto/bio/bio_meth.c index c5f9f7e8e7..c10f8d01d1 100644 --- a/crypto/bio/bio_meth.c +++ b/crypto/bio/bio_meth.c @@ -62,12 +62,45 @@ int BIO_meth_set_write(BIO_METHOD *biom, } int (*BIO_meth_get_read(BIO_METHOD *biom)) (BIO *, char *, int) +{ + return biom->bread_old; +} + +int (*BIO_meth_get_read_ex(BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *) { return biom->bread; } +/* Conversion for old style bread to new style */ +int bread_conv(BIO *bio, char *out, size_t outl, size_t *read) +{ + int ret; + + if (outl > INT_MAX) + return 0; + + ret = bio->method->bread_old(bio, out, (int)outl); + + if (ret <= 0) { + *read = 0; + return ret; + } + + *read = (size_t)ret; + + return 1; +} + int BIO_meth_set_read(BIO_METHOD *biom, int (*bread) (BIO *, char *, int)) +{ + biom->bread_old = bread; + biom->bread = bread_conv; + return 1; +} + +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)) { biom->bread = bread; return 1; -- cgit v1.2.3