From 14e275e8fb736be4ea83441b630515f7be97d06b Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Thu, 25 Jul 2019 21:57:48 +0200 Subject: [PATCH] Deprecate the public definition of ERR_STATE The intention is to make it opaque later on. Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/9462) --- crypto/err/err.c | 6 ++++++ crypto/err/err_blocks.c | 3 +++ crypto/err/err_prn.c | 3 +++ include/openssl/err.h | 12 +++++++----- include/openssl/ossl_typ.h | 2 ++ 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/crypto/err/err.c b/crypto/err/err.c index deaa579090..25426be730 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -7,6 +7,9 @@ * https://www.openssl.org/source/license.html */ +/* TODO: When ERR_STATE becomes opaque, this musts be removed */ +#define OSSL_FORCE_ERR_STATE + #include #include #include @@ -24,6 +27,9 @@ #include "e_os.h" #include "err_locl.h" +/* Forward declaration in case it's not published because of configuration */ +ERR_STATE *ERR_get_state(void); + static int err_load_strings(const ERR_STRING_DATA *str); static void ERR_STATE_free(ERR_STATE *s); diff --git a/crypto/err/err_blocks.c b/crypto/err/err_blocks.c index cf1bb9708a..c2ff7c0823 100644 --- a/crypto/err/err_blocks.c +++ b/crypto/err/err_blocks.c @@ -7,6 +7,9 @@ * https://www.openssl.org/source/license.html */ +/* TODO: When ERR_STATE becomes opaque, this musts be removed */ +#define OSSL_FORCE_ERR_STATE + #include #include #include "err_locl.h" diff --git a/crypto/err/err_prn.c b/crypto/err/err_prn.c index 9ea3eb3dee..1e1531b91d 100644 --- a/crypto/err/err_prn.c +++ b/crypto/err/err_prn.c @@ -7,6 +7,9 @@ * https://www.openssl.org/source/license.html */ +/* TODO: When ERR_STATE becomes opaque, this musts be removed */ +#define OSSL_FORCE_ERR_STATE + #include #include "internal/cryptlib.h" #include diff --git a/include/openssl/err.h b/include/openssl/err.h index 2b4a71a9a4..fc7326b7c9 100644 --- a/include/openssl/err.h +++ b/include/openssl/err.h @@ -38,11 +38,12 @@ extern "C" { # define ERR_TXT_MALLOCED 0x01 # define ERR_TXT_STRING 0x02 -# define ERR_FLAG_MARK 0x01 -# define ERR_FLAG_CLEAR 0x02 +# if !OPENSSL_API_3 || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { +# define ERR_NUM_ERRORS 16 +struct err_state_st { int err_flags[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; @@ -52,7 +53,8 @@ typedef struct err_state_st { int err_line[ERR_NUM_ERRORS]; const char *err_func[ERR_NUM_ERRORS]; int top, bottom; -} ERR_STATE; +}; +# endif /* library */ # define ERR_LIB_NONE 1 diff --git a/include/openssl/ossl_typ.h b/include/openssl/ossl_typ.h index 530de2d20c..70d9144ba1 100644 --- a/include/openssl/ossl_typ.h +++ b/include/openssl/ossl_typ.h @@ -88,6 +88,8 @@ typedef struct bn_gencb_st BN_GENCB; typedef struct buf_mem_st BUF_MEM; +typedef struct err_state_st ERR_STATE; + typedef struct evp_cipher_st EVP_CIPHER; typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; typedef struct evp_md_st EVP_MD; -- 2.25.1