From fce78bd4ede74d4fa7bd1c8195d8f7bc9403bd4c Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Fri, 15 Dec 2017 19:33:48 +0100 Subject: [PATCH] Fix invalid function type casts. Rename bio_info_cb to BIO_info_cb. Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/4493) --- crypto/asn1/bio_asn1.c | 4 +- crypto/bio/bf_buff.c | 4 +- crypto/bio/bf_lbuf.c | 4 +- crypto/bio/bf_nbio.c | 4 +- crypto/bio/bf_null.c | 4 +- crypto/bio/bio_lib.c | 4 +- crypto/bio/bio_meth.c | 4 +- crypto/bio/bss_conn.c | 18 ++++---- crypto/comp/c_zlib.c | 4 +- crypto/evp/bio_b64.c | 4 +- crypto/evp/bio_enc.c | 4 +- crypto/evp/bio_md.c | 4 +- crypto/evp/bio_ok.c | 4 +- doc/man3/BIO_ctrl.pod | 11 ++--- doc/man3/BIO_meth_new.pod | 4 +- include/internal/bio.h | 2 +- include/openssl/bio.h | 10 ++-- ssl/bio_ssl.c | 22 ++------- ssl/s3_lib.c | 18 ++++++-- ssl/ssl_lib.c | 84 ++++++++++++++++++++++++++++------ test/ossl_shim/async_bio.cc | 6 +-- test/ossl_shim/packeted_bio.cc | 6 +-- test/testutil/tap_bio.c | 4 +- util/indent.pro | 1 + util/private.num | 1 + 25 files changed, 142 insertions(+), 93 deletions(-) diff --git a/crypto/asn1/bio_asn1.c b/crypto/asn1/bio_asn1.c index a8cbb6a99d..3c7c12291b 100644 --- a/crypto/asn1/bio_asn1.c +++ b/crypto/asn1/bio_asn1.c @@ -66,7 +66,7 @@ static int asn1_bio_gets(BIO *h, char *str, int size); static long asn1_bio_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int asn1_bio_new(BIO *h); static int asn1_bio_free(BIO *data); -static long asn1_bio_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long asn1_bio_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static int asn1_bio_init(BIO_ASN1_BUF_CTX *ctx, int size); static int asn1_bio_flush_ex(BIO *b, BIO_ASN1_BUF_CTX *ctx, @@ -307,7 +307,7 @@ static int asn1_bio_gets(BIO *b, char *str, int size) return BIO_gets(next, str, size); } -static long asn1_bio_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long asn1_bio_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { BIO *next = BIO_next(b); if (next == NULL) diff --git a/crypto/bio/bf_buff.c b/crypto/bio/bf_buff.c index b90023ae2f..8e87a629b8 100644 --- a/crypto/bio/bf_buff.c +++ b/crypto/bio/bf_buff.c @@ -19,7 +19,7 @@ static int buffer_gets(BIO *h, char *str, int size); static long buffer_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int buffer_new(BIO *h); static int buffer_free(BIO *data); -static long buffer_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long buffer_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); #define DEFAULT_BUFFER_SIZE 4096 static const BIO_METHOD methods_buffer = { @@ -408,7 +408,7 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) return 0; } -static long buffer_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long buffer_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; diff --git a/crypto/bio/bf_lbuf.c b/crypto/bio/bf_lbuf.c index f3b91d9660..812ed3f452 100644 --- a/crypto/bio/bf_lbuf.c +++ b/crypto/bio/bf_lbuf.c @@ -20,7 +20,7 @@ static int linebuffer_gets(BIO *h, char *str, int size); static long linebuffer_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int linebuffer_new(BIO *h); static int linebuffer_free(BIO *data); -static long linebuffer_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long linebuffer_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); /* A 10k maximum should be enough for most purposes */ #define DEFAULT_LINEBUFFER_SIZE 1024*10 @@ -296,7 +296,7 @@ static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr) return 0; } -static long linebuffer_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long linebuffer_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; diff --git a/crypto/bio/bf_nbio.c b/crypto/bio/bf_nbio.c index 1853cb1049..c41b5d58dc 100644 --- a/crypto/bio/bf_nbio.c +++ b/crypto/bio/bf_nbio.c @@ -24,7 +24,7 @@ static int nbiof_gets(BIO *h, char *str, int size); static long nbiof_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int nbiof_new(BIO *h); static int nbiof_free(BIO *data); -static long nbiof_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long nbiof_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); typedef struct nbio_test_st { /* only set if we sent a 'should retry' error */ int lrn; @@ -169,7 +169,7 @@ static long nbiof_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long nbiof_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long nbiof_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; diff --git a/crypto/bio/bf_null.c b/crypto/bio/bf_null.c index 574fe22884..df4e51133f 100644 --- a/crypto/bio/bf_null.c +++ b/crypto/bio/bf_null.c @@ -23,7 +23,7 @@ static int nullf_gets(BIO *h, char *str, int size); static long nullf_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int nullf_new(BIO *h); static int nullf_free(BIO *data); -static long nullf_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long nullf_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static const BIO_METHOD methods_nullf = { BIO_TYPE_NULL_FILTER, "NULL filter", @@ -115,7 +115,7 @@ static long nullf_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long nullf_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long nullf_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c index 3e90f8cfcb..8a2ec0ee69 100644 --- a/crypto/bio/bio_lib.c +++ b/crypto/bio/bio_lib.c @@ -533,9 +533,7 @@ long BIO_ctrl(BIO *b, int cmd, long larg, void *parg) return ret; } -long BIO_callback_ctrl(BIO *b, int cmd, - void (*fp) (struct bio_st *, int, const char *, int, - long, long)) +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret; diff --git a/crypto/bio/bio_meth.c b/crypto/bio/bio_meth.c index 99e81c7cad..955be84e41 100644 --- a/crypto/bio/bio_meth.c +++ b/crypto/bio/bio_meth.c @@ -200,14 +200,14 @@ int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)) return 1; } -long (*BIO_meth_get_callback_ctrl(BIO_METHOD *biom)) (BIO *, int, bio_info_cb *) +long (*BIO_meth_get_callback_ctrl(BIO_METHOD *biom)) (BIO *, int, BIO_info_cb *) { return biom->callback_ctrl; } int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, long (*callback_ctrl) (BIO *, int, - bio_info_cb *)) + BIO_info_cb *)) { biom->callback_ctrl = callback_ctrl; return 1; diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c index 0ead113cad..78e42d0525 100644 --- a/crypto/bio/bss_conn.c +++ b/crypto/bio/bss_conn.c @@ -32,7 +32,7 @@ typedef struct bio_connect_st { * The callback should return 'ret'. state is for compatibility with the * ssl info_callback */ - int (*info_callback) (const BIO *bio, int state, int ret); + BIO_info_cb *info_callback; } BIO_CONNECT; static int conn_write(BIO *h, const char *buf, int num); @@ -41,7 +41,7 @@ static int conn_puts(BIO *h, const char *str); static long conn_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int conn_new(BIO *h); static int conn_free(BIO *data); -static long conn_callback_ctrl(BIO *h, int cmd, bio_info_cb *); +static long conn_callback_ctrl(BIO *h, int cmd, BIO_info_cb *); static int conn_state(BIO *b, BIO_CONNECT *c); static void conn_close_socket(BIO *data); @@ -75,7 +75,7 @@ static const BIO_METHOD methods_connectp = { static int conn_state(BIO *b, BIO_CONNECT *c) { int ret = -1, i; - int (*cb) (const BIO *, int, int) = NULL; + BIO_info_cb *cb = NULL; if (c->info_callback != NULL) cb = c->info_callback; @@ -473,8 +473,7 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr) * FIXME: the cast of the function seems unlikely to be a good * idea */ - (void)BIO_set_info_callback(dbio, - (bio_info_cb *)data->info_callback); + (void)BIO_set_info_callback(dbio, data->info_callback); } break; case BIO_CTRL_SET_CALLBACK: @@ -482,9 +481,9 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr) break; case BIO_CTRL_GET_CALLBACK: { - int (**fptr) (const BIO *bio, int state, int xret); + BIO_info_cb **fptr; - fptr = (int (**)(const BIO *bio, int state, int xret))ptr; + fptr = (BIO_info_cb **)ptr; *fptr = data->info_callback; } break; @@ -495,7 +494,7 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long conn_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long conn_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; BIO_CONNECT *data; @@ -505,8 +504,7 @@ static long conn_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) switch (cmd) { case BIO_CTRL_SET_CALLBACK: { - data->info_callback = - (int (*)(const struct bio_st *, int, int))fp; + data->info_callback = fp; } break; default: diff --git a/crypto/comp/c_zlib.c b/crypto/comp/c_zlib.c index 05787aa394..5d82e15979 100644 --- a/crypto/comp/c_zlib.c +++ b/crypto/comp/c_zlib.c @@ -291,7 +291,7 @@ static int bio_zlib_free(BIO *bi); static int bio_zlib_read(BIO *b, char *out, int outl); static int bio_zlib_write(BIO *b, const char *in, int inl); static long bio_zlib_ctrl(BIO *b, int cmd, long num, void *ptr); -static long bio_zlib_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp); +static long bio_zlib_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); static const BIO_METHOD bio_meth_zlib = { BIO_TYPE_COMP, @@ -607,7 +607,7 @@ static long bio_zlib_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long bio_zlib_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long bio_zlib_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { BIO *next = BIO_next(b); if (next == NULL) diff --git a/crypto/evp/bio_b64.c b/crypto/evp/bio_b64.c index 87a0cce0f6..cade6f8f95 100644 --- a/crypto/evp/bio_b64.c +++ b/crypto/evp/bio_b64.c @@ -20,7 +20,7 @@ static int b64_puts(BIO *h, const char *str); static long b64_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int b64_new(BIO *h); static int b64_free(BIO *data); -static long b64_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long b64_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); #define B64_BLOCK_SIZE 1024 #define B64_BLOCK_SIZE2 768 #define B64_NONE 0 @@ -523,7 +523,7 @@ static long b64_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long b64_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long b64_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; BIO *next = BIO_next(b); diff --git a/crypto/evp/bio_enc.c b/crypto/evp/bio_enc.c index 366e2e928b..30f09e6d5f 100644 --- a/crypto/evp/bio_enc.c +++ b/crypto/evp/bio_enc.c @@ -19,7 +19,7 @@ static int enc_read(BIO *h, char *buf, int size); static long enc_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int enc_new(BIO *h); static int enc_free(BIO *data); -static long enc_callback_ctrl(BIO *h, int cmd, bio_info_cb *fps); +static long enc_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fps); #define ENC_BLOCK_SIZE (1024*4) #define ENC_MIN_CHUNK (256) #define BUF_OFFSET (ENC_MIN_CHUNK + EVP_MAX_BLOCK_LENGTH) @@ -385,7 +385,7 @@ static long enc_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long enc_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long enc_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; BIO *next = BIO_next(b); diff --git a/crypto/evp/bio_md.c b/crypto/evp/bio_md.c index 50069f0b61..288dee01b2 100644 --- a/crypto/evp/bio_md.c +++ b/crypto/evp/bio_md.c @@ -26,7 +26,7 @@ static int md_gets(BIO *h, char *str, int size); static long md_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int md_new(BIO *h); static int md_free(BIO *data); -static long md_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long md_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static const BIO_METHOD methods_md = { BIO_TYPE_MD, @@ -198,7 +198,7 @@ static long md_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long md_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long md_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; BIO *next; diff --git a/crypto/evp/bio_ok.c b/crypto/evp/bio_ok.c index 0f744fc72e..5871e632b5 100644 --- a/crypto/evp/bio_ok.c +++ b/crypto/evp/bio_ok.c @@ -83,7 +83,7 @@ static int ok_read(BIO *h, char *buf, int size); static long ok_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int ok_new(BIO *h); static int ok_free(BIO *data); -static long ok_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long ok_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static __owur int sig_out(BIO *b); static __owur int sig_in(BIO *b); @@ -403,7 +403,7 @@ static long ok_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long ok_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long ok_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret = 1; BIO *next; diff --git a/doc/man3/BIO_ctrl.pod b/doc/man3/BIO_ctrl.pod index 5aef75a82b..60cd10883b 100644 --- a/doc/man3/BIO_ctrl.pod +++ b/doc/man3/BIO_ctrl.pod @@ -5,18 +5,17 @@ BIO_ctrl, BIO_callback_ctrl, BIO_ptr_ctrl, BIO_int_ctrl, BIO_reset, BIO_seek, BIO_tell, BIO_flush, BIO_eof, BIO_set_close, BIO_get_close, BIO_pending, BIO_wpending, BIO_ctrl_pending, BIO_ctrl_wpending, -BIO_get_info_callback, BIO_set_info_callback, bio_info_cb +BIO_get_info_callback, BIO_set_info_callback, BIO_info_cb - BIO control operations =head1 SYNOPSIS #include - typedef void bio_info_cb(BIO *b, int oper, const char *ptr, - int arg1, long arg2, long arg3); + typedef int BIO_info_cb(BIO *b, int state, int res); long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); - long BIO_callback_ctrl(BIO *b, int cmd, bio_info_cb *cb); + long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *cb); char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); @@ -32,8 +31,8 @@ BIO_get_info_callback, BIO_set_info_callback, bio_info_cb size_t BIO_ctrl_pending(BIO *b); size_t BIO_ctrl_wpending(BIO *b); - int BIO_get_info_callback(BIO *b, bio_info_cb **cbp); - int BIO_set_info_callback(BIO *b, bio_info_cb *cb); + int BIO_get_info_callback(BIO *b, BIO_info_cb **cbp); + int BIO_set_info_callback(BIO *b, BIO_info_cb *cb); =head1 DESCRIPTION diff --git a/doc/man3/BIO_meth_new.pod b/doc/man3/BIO_meth_new.pod index 5617d099f2..c86568365e 100644 --- a/doc/man3/BIO_meth_new.pod +++ b/doc/man3/BIO_meth_new.pod @@ -52,9 +52,9 @@ BIO_meth_set_callback_ctrl - Routines to build up BIO methods int (*BIO_meth_get_destroy(BIO_METHOD *biom))(BIO *); int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *)); - long (*BIO_meth_get_callback_ctrl(BIO_METHOD *biom))(BIO *, int, bio_info_cb *); + long (*BIO_meth_get_callback_ctrl(BIO_METHOD *biom))(BIO *, int, BIO_info_cb *); int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, - long (*callback_ctrl)(BIO *, int, bio_info_cb *)); + long (*callback_ctrl)(BIO *, int, BIO_info_cb *)); =head1 DESCRIPTION diff --git a/include/internal/bio.h b/include/internal/bio.h index f02d74115f..4428947f2d 100644 --- a/include/internal/bio.h +++ b/include/internal/bio.h @@ -21,7 +21,7 @@ struct bio_method_st { long (*ctrl) (BIO *, int, long, void *); int (*create) (BIO *); int (*destroy) (BIO *); - long (*callback_ctrl) (BIO *, int, bio_info_cb *); + long (*callback_ctrl) (BIO *, int, BIO_info_cb *); }; void bio_free_ex_data(BIO *bio); diff --git a/include/openssl/bio.h b/include/openssl/bio.h index 75aa88442c..54a833c275 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h @@ -255,7 +255,8 @@ typedef struct bio_method_st BIO_METHOD; const char *BIO_method_name(const BIO *b); int BIO_method_type(const BIO *b); -typedef void bio_info_cb(BIO *, int, const char *, int, long, long); +typedef int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ DEFINE_STACK_OF(BIO) @@ -566,8 +567,7 @@ int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); int BIO_puts(BIO *bp, const char *buf); int BIO_indent(BIO *b, int indent, int max); long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); -long BIO_callback_ctrl(BIO *b, int cmd, - void (*fp) (BIO *, int, const char *, int, long, long)); +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); BIO *BIO_push(BIO *b, BIO *append); @@ -785,10 +785,10 @@ int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); int (*BIO_meth_get_destroy(BIO_METHOD *biom)) (BIO *); int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); long (*BIO_meth_get_callback_ctrl(BIO_METHOD *biom)) - (BIO *, int, bio_info_cb *); + (BIO *, int, BIO_info_cb *); int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, long (*callback_ctrl) (BIO *, int, - bio_info_cb *)); + BIO_info_cb *)); int ERR_load_BIO_strings(void); # ifdef __cplusplus diff --git a/ssl/bio_ssl.c b/ssl/bio_ssl.c index 5516260409..ccc0c769c5 100644 --- a/ssl/bio_ssl.c +++ b/ssl/bio_ssl.c @@ -22,7 +22,7 @@ static int ssl_puts(BIO *h, const char *str); static long ssl_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int ssl_new(BIO *h); static int ssl_free(BIO *data); -static long ssl_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long ssl_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); typedef struct bio_ssl_st { SSL *ssl; /* The ssl handle :-) */ /* re-negotiate every time the total number of bytes is this size */ @@ -383,14 +383,6 @@ static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr) case BIO_CTRL_SET_CALLBACK: ret = 0; /* use callback ctrl */ break; - case BIO_CTRL_GET_CALLBACK: - { - void (**fptr) (const SSL *xssl, int type, int val); - - fptr = (void (**)(const SSL *xssl, int type, int val))ptr; - *fptr = SSL_get_info_callback(ssl); - } - break; default: ret = BIO_ctrl(ssl->rbio, cmd, num, ptr); break; @@ -398,7 +390,7 @@ static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr) return ret; } -static long ssl_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long ssl_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { SSL *ssl; BIO_SSL *bs; @@ -408,16 +400,10 @@ static long ssl_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) ssl = bs->ssl; switch (cmd) { case BIO_CTRL_SET_CALLBACK: - { - /* - * FIXME: setting this via a completely different prototype seems - * like a crap idea - */ - SSL_set_info_callback(ssl, (void (*)(const SSL *, int, int))fp); - } + ret = BIO_callback_ctrl(ssl->rbio, cmd, fp); break; default: - ret = BIO_callback_ctrl(ssl->rbio, cmd, fp); + ret = 0; break; } return ret; diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c index 8c74a759c5..6ddd1885ce 100644 --- a/ssl/s3_lib.c +++ b/ssl/s3_lib.c @@ -3246,6 +3246,20 @@ void ssl_sort_cipher_list(void) qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare); } +static int ssl_undefined_function_1(SSL *ssl, unsigned char *r, size_t s, + const char * t, size_t u, + const unsigned char * v, size_t w, int x) +{ + (void)r; + (void)s; + (void)t; + (void)u; + (void)v; + (void)w; + (void)x; + return ssl_undefined_function(ssl); +} + const SSL3_ENC_METHOD SSLv3_enc_data = { ssl3_enc, n_ssl3_mac, @@ -3256,9 +3270,7 @@ const SSL3_ENC_METHOD SSLv3_enc_data = { SSL3_MD_CLIENT_FINISHED_CONST, 4, SSL3_MD_SERVER_FINISHED_CONST, 4, ssl3_alert_code, - (int (*)(SSL *, unsigned char *, size_t, const char *, - size_t, const unsigned char *, size_t, - int use_context))ssl_undefined_function, + ssl_undefined_function_1, 0, ssl3_set_handshake_header, tls_close_construct_packet, diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index bba0291421..37e83bddaf 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -25,27 +25,81 @@ const char SSL_version_str[] = OPENSSL_VERSION_TEXT; +static int ssl_undefined_function_1(SSL *ssl, SSL3_RECORD *r, size_t s, int t) +{ + (void)r; + (void)s; + (void)t; + return ssl_undefined_function(ssl); +} + +static int ssl_undefined_function_2(SSL *ssl, SSL3_RECORD *r, unsigned char *s, + int t) +{ + (void)r; + (void)s; + (void)t; + return ssl_undefined_function(ssl); +} + +static int ssl_undefined_function_3(SSL *ssl, unsigned char *r, + unsigned char *s, size_t t, size_t *u) +{ + (void)r; + (void)s; + (void)t; + (void)u; + return ssl_undefined_function(ssl); +} + +static int ssl_undefined_function_4(SSL *ssl, int r) +{ + (void)r; + return ssl_undefined_function(ssl); +} + +static size_t ssl_undefined_function_5(SSL *ssl, const char *r, size_t s, + unsigned char *t) +{ + (void)r; + (void)s; + (void)t; + return ssl_undefined_function(ssl); +} + +static int ssl_undefined_function_6(int r) +{ + (void)r; + return ssl_undefined_function(NULL); +} + +static int ssl_undefined_function_7(SSL *ssl, unsigned char *r, size_t s, + const char *t, size_t u, + const unsigned char *v, size_t w, int x) +{ + (void)r; + (void)s; + (void)t; + (void)u; + (void)v; + (void)w; + (void)x; + return ssl_undefined_function(ssl); +} + SSL3_ENC_METHOD ssl3_undef_enc_method = { - /* - * evil casts, but these functions are only called if there's a library - * bug - */ - (int (*)(SSL *, SSL3_RECORD *, size_t, int))ssl_undefined_function, - (int (*)(SSL *, SSL3_RECORD *, unsigned char *, int))ssl_undefined_function, + ssl_undefined_function_1, + ssl_undefined_function_2, ssl_undefined_function, - (int (*)(SSL *, unsigned char *, unsigned char *, size_t, size_t *)) - ssl_undefined_function, - (int (*)(SSL *, int))ssl_undefined_function, - (size_t (*)(SSL *, const char *, size_t, unsigned char *)) - ssl_undefined_function, + ssl_undefined_function_3, + ssl_undefined_function_4, + ssl_undefined_function_5, NULL, /* client_finished_label */ 0, /* client_finished_label_len */ NULL, /* server_finished_label */ 0, /* server_finished_label_len */ - (int (*)(int))ssl_undefined_function, - (int (*)(SSL *, unsigned char *, size_t, const char *, - size_t, const unsigned char *, size_t, - int use_context))ssl_undefined_function, + ssl_undefined_function_6, + ssl_undefined_function_7, }; struct ssl_async_args { diff --git a/test/ossl_shim/async_bio.cc b/test/ossl_shim/async_bio.cc index f0f6a38dbf..cbbabe01ea 100644 --- a/test/ossl_shim/async_bio.cc +++ b/test/ossl_shim/async_bio.cc @@ -118,10 +118,10 @@ static int AsyncFree(BIO *bio) { return 1; } -static long AsyncCallbackCtrl(BIO *bio, int cmd, bio_info_cb fp) { - if (BIO_next(bio) == NULL) { +static long AsyncCallbackCtrl(BIO *bio, int cmd, BIO_info_cb fp) +{ + if (BIO_next(bio) == NULL) return 0; - } return BIO_callback_ctrl(BIO_next(bio), cmd, fp); } diff --git a/test/ossl_shim/packeted_bio.cc b/test/ossl_shim/packeted_bio.cc index e1b3c6c678..450baeccdf 100644 --- a/test/ossl_shim/packeted_bio.cc +++ b/test/ossl_shim/packeted_bio.cc @@ -240,10 +240,10 @@ static int PacketedFree(BIO *bio) { return 1; } -static long PacketedCallbackCtrl(BIO *bio, int cmd, bio_info_cb fp) { - if (BIO_next(bio) == NULL) { +static long PacketedCallbackCtrl(BIO *bio, int cmd, BIO_info_cb fp) +{ + if (BIO_next(bio) == NULL) return 0; - } return BIO_callback_ctrl(BIO_next(bio), cmd, fp); } diff --git a/test/testutil/tap_bio.c b/test/testutil/tap_bio.c index f78dfb81d9..a6c903b5ae 100644 --- a/test/testutil/tap_bio.c +++ b/test/testutil/tap_bio.c @@ -18,7 +18,7 @@ static int tap_gets(BIO *b, char *str, int size); static long tap_ctrl(BIO *b, int cmd, long arg1, void *arg2); static int tap_new(BIO *b); static int tap_free(BIO *b); -static long tap_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); +static long tap_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); const BIO_METHOD *BIO_f_tap(void) { @@ -134,7 +134,7 @@ static long tap_ctrl(BIO *b, int cmd, long num, void *ptr) return BIO_ctrl(next, cmd, num, ptr); } -static long tap_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) +static long tap_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { return BIO_callback_ctrl(BIO_next(b), cmd, fp); } diff --git a/util/indent.pro b/util/indent.pro index c65088c6d7..7bb7bcdd6a 100644 --- a/util/indent.pro +++ b/util/indent.pro @@ -474,6 +474,7 @@ -T asn1_ps_func -T bio_dgram_data -T bio_info_cb +-T BIO_info_cb -T BIO_callback_fn -T char_io -T conf_finish_func diff --git a/util/private.num b/util/private.num index a0403174b5..1644dcb247 100644 --- a/util/private.num +++ b/util/private.num @@ -62,6 +62,7 @@ X509_STORE_CTX_verify_cb datatype X509_STORE_CTX_verify_fn datatype X509_STORE_set_verify_cb_func datatype bio_info_cb datatype +BIO_info_cb datatype custom_ext_add_cb datatype custom_ext_free_cb datatype custom_ext_parse_cb datatype