LCOV - code coverage report
Current view: top level - /usr/include/openssl - err.h (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 37.5 % 8 3
Test Date: 2026-03-24 02:15:55 Functions: 50.0 % 2 1
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /*
       2              :  * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
       3              :  *
       4              :  * Licensed under the Apache License 2.0 (the "License").  You may not use
       5              :  * this file except in compliance with the License.  You can obtain a copy
       6              :  * in the file LICENSE in the source distribution or at
       7              :  * https://www.openssl.org/source/license.html
       8              :  */
       9              : 
      10              : /* clang-format off */
      11              : 
      12              : /* clang-format on */
      13              : 
      14              : #ifndef OPENSSL_ERR_H
      15              : #define OPENSSL_ERR_H
      16              : #pragma once
      17              : 
      18              : #include <openssl/macros.h>
      19              : #ifndef OPENSSL_NO_DEPRECATED_3_0
      20              : #define HEADER_ERR_H
      21              : #endif
      22              : 
      23              : #include <openssl/e_os2.h>
      24              : 
      25              : #ifndef OPENSSL_NO_STDIO
      26              : #include <stdio.h>
      27              : #include <stdlib.h>
      28              : #endif
      29              : 
      30              : #include <openssl/types.h>
      31              : #include <openssl/bio.h>
      32              : #include <openssl/lhash.h>
      33              : #include <openssl/cryptoerr_legacy.h>
      34              : 
      35              : #ifdef __cplusplus
      36              : extern "C" {
      37              : #endif
      38              : 
      39              : #ifndef OPENSSL_NO_DEPRECATED_3_0
      40              : #ifndef OPENSSL_NO_FILENAMES
      41              : #define ERR_PUT_error(l, f, r, fn, ln) ERR_put_error(l, f, r, fn, ln)
      42              : #else
      43              : #define ERR_PUT_error(l, f, r, fn, ln) ERR_put_error(l, f, r, NULL, 0)
      44              : #endif
      45              : #endif
      46              : 
      47              : #include <limits.h>
      48              : #include <errno.h>
      49              : 
      50              : #define ERR_TXT_MALLOCED 0x01
      51              : #define ERR_TXT_STRING 0x02
      52              : 
      53              : #if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE)
      54              : #define ERR_FLAG_MARK 0x01
      55              : #define ERR_FLAG_CLEAR 0x02
      56              : 
      57              : #define ERR_NUM_ERRORS 16
      58              : struct err_state_st {
      59              :     int err_flags[ERR_NUM_ERRORS];
      60              :     int err_marks[ERR_NUM_ERRORS];
      61              :     unsigned long err_buffer[ERR_NUM_ERRORS];
      62              :     char *err_data[ERR_NUM_ERRORS];
      63              :     size_t err_data_size[ERR_NUM_ERRORS];
      64              :     int err_data_flags[ERR_NUM_ERRORS];
      65              :     char *err_file[ERR_NUM_ERRORS];
      66              :     int err_line[ERR_NUM_ERRORS];
      67              :     char *err_func[ERR_NUM_ERRORS];
      68              :     int top, bottom;
      69              : };
      70              : #endif
      71              : 
      72              : /* library */
      73              : #define ERR_LIB_NONE 1
      74              : #define ERR_LIB_SYS 2
      75              : #define ERR_LIB_BN 3
      76              : #define ERR_LIB_RSA 4
      77              : #define ERR_LIB_DH 5
      78              : #define ERR_LIB_EVP 6
      79              : #define ERR_LIB_BUF 7
      80              : #define ERR_LIB_OBJ 8
      81              : #define ERR_LIB_PEM 9
      82              : #define ERR_LIB_DSA 10
      83              : #define ERR_LIB_X509 11
      84              : /* #define ERR_LIB_METH         12 */
      85              : #define ERR_LIB_ASN1 13
      86              : #define ERR_LIB_CONF 14
      87              : #define ERR_LIB_CRYPTO 15
      88              : #define ERR_LIB_EC 16
      89              : #define ERR_LIB_SSL 20
      90              : /* #define ERR_LIB_SSL23        21 */
      91              : /* #define ERR_LIB_SSL2         22 */
      92              : /* #define ERR_LIB_SSL3         23 */
      93              : /* #define ERR_LIB_RSAREF       30 */
      94              : /* #define ERR_LIB_PROXY        31 */
      95              : #define ERR_LIB_BIO 32
      96              : #define ERR_LIB_PKCS7 33
      97              : #define ERR_LIB_X509V3 34
      98              : #define ERR_LIB_PKCS12 35
      99              : #define ERR_LIB_RAND 36
     100              : #define ERR_LIB_DSO 37
     101              : #define ERR_LIB_ENGINE 38
     102              : #define ERR_LIB_OCSP 39
     103              : #define ERR_LIB_UI 40
     104              : #define ERR_LIB_COMP 41
     105              : #define ERR_LIB_ECDSA 42
     106              : #define ERR_LIB_ECDH 43
     107              : #define ERR_LIB_OSSL_STORE 44
     108              : #define ERR_LIB_FIPS 45
     109              : #define ERR_LIB_CMS 46
     110              : #define ERR_LIB_TS 47
     111              : #define ERR_LIB_HMAC 48
     112              : /* # define ERR_LIB_JPAKE       49 */
     113              : #define ERR_LIB_CT 50
     114              : #define ERR_LIB_ASYNC 51
     115              : #define ERR_LIB_KDF 52
     116              : #define ERR_LIB_SM2 53
     117              : #define ERR_LIB_ESS 54
     118              : #define ERR_LIB_PROP 55
     119              : #define ERR_LIB_CRMF 56
     120              : #define ERR_LIB_PROV 57
     121              : #define ERR_LIB_CMP 58
     122              : #define ERR_LIB_OSSL_ENCODER 59
     123              : #define ERR_LIB_OSSL_DECODER 60
     124              : #define ERR_LIB_HTTP 61
     125              : 
     126              : #define ERR_LIB_USER 128
     127              : 
     128              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     129              : #define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL)
     130              : #define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL)
     131              : #define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL)
     132              : #define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL)
     133              : #define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL)
     134              : #define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL)
     135              : #define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL)
     136              : #define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL)
     137              : #define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL)
     138              : #define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL)
     139              : #define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL)
     140              : #define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL)
     141              : #define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL)
     142              : #define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL)
     143              : #define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL)
     144              : #define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL)
     145              : #define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL)
     146              : #define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL)
     147              : #define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL)
     148              : #define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL)
     149              : #define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL)
     150              : #define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL)
     151              : #define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL)
     152              : #define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL)
     153              : #define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL)
     154              : #define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL)
     155              : #define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL)
     156              : #define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL)
     157              : #define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL)
     158              : #define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL)
     159              : #define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL)
     160              : #define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL)
     161              : #define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL)
     162              : #define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL)
     163              : #define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL)
     164              : #define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL)
     165              : #define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL)
     166              : #define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL)
     167              : #define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL)
     168              : #define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL)
     169              : #define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL)
     170              : #define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL)
     171              : #define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL)
     172              : #endif
     173              : 
     174              : /*-
     175              :  * The error code packs differently depending on if it records a system
     176              :  * error or an OpenSSL error.
     177              :  *
     178              :  * A system error packs like this (we follow POSIX and only allow positive
     179              :  * numbers that fit in an |int|):
     180              :  *
     181              :  * +-+-------------------------------------------------------------+
     182              :  * |1|                     system error number                     |
     183              :  * +-+-------------------------------------------------------------+
     184              :  *
     185              :  * An OpenSSL error packs like this:
     186              :  *
     187              :  * <---------------------------- 32 bits -------------------------->
     188              :  *    <--- 8 bits ---><------------------ 23 bits ----------------->
     189              :  * +-+---------------+---------------------------------------------+
     190              :  * |0|    library    |                    reason                   |
     191              :  * +-+---------------+---------------------------------------------+
     192              :  *
     193              :  * A few of the reason bits are reserved as flags with special meaning:
     194              :  *
     195              :  *                    <5 bits-<>--------- 19 bits ----------------->
     196              :  *                   +-------+-+-----------------------------------+
     197              :  *                   | rflags| |          reason                   |
     198              :  *                   +-------+-+-----------------------------------+
     199              :  *                            ^
     200              :  *                            |
     201              :  *                           ERR_RFLAG_FATAL = ERR_R_FATAL
     202              :  *
     203              :  * The reason flags are part of the overall reason code for practical
     204              :  * reasons, as they provide an easy way to place different types of
     205              :  * reason codes in different numeric ranges.
     206              :  *
     207              :  * The currently known reason flags are:
     208              :  *
     209              :  * ERR_RFLAG_FATAL      Flags that the reason code is considered fatal.
     210              :  *                      For backward compatibility reasons, this flag
     211              :  *                      is also the code for ERR_R_FATAL (that reason
     212              :  *                      code served the dual purpose of flag and reason
     213              :  *                      code in one in pre-3.0 OpenSSL).
     214              :  * ERR_RFLAG_COMMON     Flags that the reason code is common to all
     215              :  *                      libraries.  All ERR_R_ macros must use this flag,
     216              :  *                      and no other _R_ macro is allowed to use it.
     217              :  */
     218              : 
     219              : /* Macros to help decode recorded system errors */
     220              : #define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
     221              : #define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
     222              : 
     223              : /*
     224              :  * Macros to help decode recorded OpenSSL errors
     225              :  * As expressed above, RFLAGS and REASON overlap by one bit to allow
     226              :  * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code.
     227              :  */
     228              : #define ERR_LIB_OFFSET 23L
     229              : #define ERR_LIB_MASK 0xFF
     230              : #define ERR_RFLAGS_OFFSET 18L
     231              : #define ERR_RFLAGS_MASK 0x1F
     232              : #define ERR_REASON_MASK 0X7FFFFF
     233              : 
     234              : /*
     235              :  * Reason flags are defined pre-shifted to easily combine with the reason
     236              :  * number.
     237              :  */
     238              : #define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET)
     239              : #define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
     240              : 
     241              : #define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
     242              : 
     243            0 : static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode)
     244              : {
     245            0 :     if (ERR_SYSTEM_ERROR(errcode))
     246            0 :         return ERR_LIB_SYS;
     247            0 :     return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK;
     248              : }
     249              : 
     250              : static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode)
     251              : {
     252              :     if (ERR_SYSTEM_ERROR(errcode))
     253              :         return 0;
     254              :     return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET);
     255              : }
     256              : 
     257           52 : static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode)
     258              : {
     259           52 :     if (ERR_SYSTEM_ERROR(errcode))
     260            0 :         return errcode & ERR_SYSTEM_MASK;
     261           52 :     return errcode & ERR_REASON_MASK;
     262              : }
     263              : 
     264              : static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode)
     265              : {
     266              :     return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0;
     267              : }
     268              : 
     269              : static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode)
     270              : {
     271              :     return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0;
     272              : }
     273              : 
     274              : /*
     275              :  * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may
     276              :  * only be used for that purpose.  System errors are packed internally.
     277              :  * ERR_PACK takes reason flags and reason code combined in |reason|.
     278              :  * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL.
     279              :  */
     280              : #define ERR_PACK(lib, func, reason) \
     281              :     ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
     282              : 
     283              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     284              : #define SYS_F_FOPEN 0
     285              : #define SYS_F_CONNECT 0
     286              : #define SYS_F_GETSERVBYNAME 0
     287              : #define SYS_F_SOCKET 0
     288              : #define SYS_F_IOCTLSOCKET 0
     289              : #define SYS_F_BIND 0
     290              : #define SYS_F_LISTEN 0
     291              : #define SYS_F_ACCEPT 0
     292              : #define SYS_F_WSASTARTUP 0
     293              : #define SYS_F_OPENDIR 0
     294              : #define SYS_F_FREAD 0
     295              : #define SYS_F_GETADDRINFO 0
     296              : #define SYS_F_GETNAMEINFO 0
     297              : #define SYS_F_SETSOCKOPT 0
     298              : #define SYS_F_GETSOCKOPT 0
     299              : #define SYS_F_GETSOCKNAME 0
     300              : #define SYS_F_GETHOSTBYNAME 0
     301              : #define SYS_F_FFLUSH 0
     302              : #define SYS_F_OPEN 0
     303              : #define SYS_F_CLOSE 0
     304              : #define SYS_F_IOCTL 0
     305              : #define SYS_F_STAT 0
     306              : #define SYS_F_FCNTL 0
     307              : #define SYS_F_FSTAT 0
     308              : #define SYS_F_SENDFILE 0
     309              : #endif
     310              : 
     311              : /*
     312              :  * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON.
     313              :  */
     314              : 
     315              : /* "we came from here" global reason codes, range 1..255 */
     316              : #define ERR_R_SYS_LIB (ERR_LIB_SYS /* 2 */ | ERR_RFLAG_COMMON)
     317              : #define ERR_R_BN_LIB (ERR_LIB_BN /* 3 */ | ERR_RFLAG_COMMON)
     318              : #define ERR_R_RSA_LIB (ERR_LIB_RSA /* 4 */ | ERR_RFLAG_COMMON)
     319              : #define ERR_R_DH_LIB (ERR_LIB_DH /* 5 */ | ERR_RFLAG_COMMON)
     320              : #define ERR_R_EVP_LIB (ERR_LIB_EVP /* 6 */ | ERR_RFLAG_COMMON)
     321              : #define ERR_R_BUF_LIB (ERR_LIB_BUF /* 7 */ | ERR_RFLAG_COMMON)
     322              : #define ERR_R_OBJ_LIB (ERR_LIB_OBJ /* 8 */ | ERR_RFLAG_COMMON)
     323              : #define ERR_R_PEM_LIB (ERR_LIB_PEM /* 9 */ | ERR_RFLAG_COMMON)
     324              : #define ERR_R_DSA_LIB (ERR_LIB_DSA /* 10 */ | ERR_RFLAG_COMMON)
     325              : #define ERR_R_X509_LIB (ERR_LIB_X509 /* 11 */ | ERR_RFLAG_COMMON)
     326              : #define ERR_R_ASN1_LIB (ERR_LIB_ASN1 /* 13 */ | ERR_RFLAG_COMMON)
     327              : #define ERR_R_CONF_LIB (ERR_LIB_CONF /* 14 */ | ERR_RFLAG_COMMON)
     328              : #define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO /* 15 */ | ERR_RFLAG_COMMON)
     329              : #define ERR_R_EC_LIB (ERR_LIB_EC /* 16 */ | ERR_RFLAG_COMMON)
     330              : #define ERR_R_SSL_LIB (ERR_LIB_SSL /* 20 */ | ERR_RFLAG_COMMON)
     331              : #define ERR_R_BIO_LIB (ERR_LIB_BIO /* 32 */ | ERR_RFLAG_COMMON)
     332              : #define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7 /* 33 */ | ERR_RFLAG_COMMON)
     333              : #define ERR_R_X509V3_LIB (ERR_LIB_X509V3 /* 34 */ | ERR_RFLAG_COMMON)
     334              : #define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12 /* 35 */ | ERR_RFLAG_COMMON)
     335              : #define ERR_R_RAND_LIB (ERR_LIB_RAND /* 36 */ | ERR_RFLAG_COMMON)
     336              : #define ERR_R_DSO_LIB (ERR_LIB_DSO /* 37 */ | ERR_RFLAG_COMMON)
     337              : #define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE /* 38 */ | ERR_RFLAG_COMMON)
     338              : #define ERR_R_UI_LIB (ERR_LIB_UI /* 40 */ | ERR_RFLAG_COMMON)
     339              : #define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA /* 42 */ | ERR_RFLAG_COMMON)
     340              : #define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE /* 44 */ | ERR_RFLAG_COMMON)
     341              : #define ERR_R_CMS_LIB (ERR_LIB_CMS /* 46 */ | ERR_RFLAG_COMMON)
     342              : #define ERR_R_TS_LIB (ERR_LIB_TS /* 47 */ | ERR_RFLAG_COMMON)
     343              : #define ERR_R_CT_LIB (ERR_LIB_CT /* 50 */ | ERR_RFLAG_COMMON)
     344              : #define ERR_R_PROV_LIB (ERR_LIB_PROV /* 57 */ | ERR_RFLAG_COMMON)
     345              : #define ERR_R_ESS_LIB (ERR_LIB_ESS /* 54 */ | ERR_RFLAG_COMMON)
     346              : #define ERR_R_CMP_LIB (ERR_LIB_CMP /* 58 */ | ERR_RFLAG_COMMON)
     347              : #define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER /* 59 */ | ERR_RFLAG_COMMON)
     348              : #define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER /* 60 */ | ERR_RFLAG_COMMON)
     349              : 
     350              : /* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */
     351              : #define ERR_R_FATAL (ERR_RFLAG_FATAL | ERR_RFLAG_COMMON)
     352              : #define ERR_R_MALLOC_FAILURE (256 | ERR_R_FATAL)
     353              : #define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257 | ERR_R_FATAL)
     354              : #define ERR_R_PASSED_NULL_PARAMETER (258 | ERR_R_FATAL)
     355              : #define ERR_R_INTERNAL_ERROR (259 | ERR_R_FATAL)
     356              : #define ERR_R_DISABLED (260 | ERR_R_FATAL)
     357              : #define ERR_R_INIT_FAIL (261 | ERR_R_FATAL)
     358              : #define ERR_R_PASSED_INVALID_ARGUMENT (262 | ERR_RFLAG_COMMON)
     359              : #define ERR_R_OPERATION_FAIL (263 | ERR_R_FATAL)
     360              : #define ERR_R_INVALID_PROVIDER_FUNCTIONS (264 | ERR_R_FATAL)
     361              : #define ERR_R_INTERRUPTED_OR_CANCELLED (265 | ERR_RFLAG_COMMON)
     362              : #define ERR_R_NESTED_ASN1_ERROR (266 | ERR_RFLAG_COMMON)
     363              : #define ERR_R_MISSING_ASN1_EOS (267 | ERR_RFLAG_COMMON)
     364              : #define ERR_R_UNSUPPORTED (268 | ERR_RFLAG_COMMON)
     365              : #define ERR_R_FETCH_FAILED (269 | ERR_RFLAG_COMMON)
     366              : #define ERR_R_INVALID_PROPERTY_DEFINITION (270 | ERR_RFLAG_COMMON)
     367              : #define ERR_R_UNABLE_TO_GET_READ_LOCK (271 | ERR_R_FATAL)
     368              : #define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272 | ERR_R_FATAL)
     369              : 
     370              : typedef struct ERR_string_data_st {
     371              :     unsigned long error;
     372              :     const char *string;
     373              : } ERR_STRING_DATA;
     374              : 
     375              : /* clang-format off */
     376              : DEFINE_LHASH_OF_INTERNAL(ERR_STRING_DATA);
     377              : #define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp)), lh_ERR_STRING_DATA_hash_thunk, lh_ERR_STRING_DATA_comp_thunk, lh_ERR_STRING_DATA_doall_thunk, lh_ERR_STRING_DATA_doall_arg_thunk))
     378              : #define lh_ERR_STRING_DATA_free(lh) OPENSSL_LH_free(ossl_check_ERR_STRING_DATA_lh_type(lh))
     379              : #define lh_ERR_STRING_DATA_flush(lh) OPENSSL_LH_flush(ossl_check_ERR_STRING_DATA_lh_type(lh))
     380              : #define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr)))
     381              : #define lh_ERR_STRING_DATA_delete(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_delete(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr)))
     382              : #define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr)))
     383              : #define lh_ERR_STRING_DATA_error(lh) OPENSSL_LH_error(ossl_check_ERR_STRING_DATA_lh_type(lh))
     384              : #define lh_ERR_STRING_DATA_num_items(lh) OPENSSL_LH_num_items(ossl_check_ERR_STRING_DATA_lh_type(lh))
     385              : #define lh_ERR_STRING_DATA_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out)
     386              : #define lh_ERR_STRING_DATA_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out)
     387              : #define lh_ERR_STRING_DATA_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out)
     388              : #define lh_ERR_STRING_DATA_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh))
     389              : #define lh_ERR_STRING_DATA_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh), dl)
     390              : #define lh_ERR_STRING_DATA_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_doallfunc_type(dfn))
     391              : 
     392              : /* clang-format on */
     393              : 
     394              : /* 12 lines and some on an 80 column terminal */
     395              : #define ERR_MAX_DATA_SIZE 1024
     396              : 
     397              : /* Building blocks */
     398              : void ERR_new(void);
     399              : void ERR_set_debug(const char *file, int line, const char *func);
     400              : void ERR_set_error(int lib, int reason, const char *fmt, ...);
     401              : void ERR_vset_error(int lib, int reason, const char *fmt, va_list args);
     402              : 
     403              : /* Main error raising functions */
     404              : #define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
     405              : #define ERR_raise_data                                           \
     406              :     (ERR_new(),                                                  \
     407              :         ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
     408              :         ERR_set_error)
     409              : 
     410              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     411              : /* Backward compatibility */
     412              : #define ERR_put_error(lib, func, reason, file, line) \
     413              :     (ERR_new(),                                      \
     414              :         ERR_set_debug((file), (line), OPENSSL_FUNC), \
     415              :         ERR_set_error((lib), (reason), NULL))
     416              : #endif
     417              : 
     418              : void ERR_set_error_data(char *data, int flags);
     419              : 
     420              : unsigned long ERR_get_error(void);
     421              : unsigned long ERR_get_error_all(const char **file, int *line,
     422              :     const char **func,
     423              :     const char **data, int *flags);
     424              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     425              : OSSL_DEPRECATEDIN_3_0
     426              : unsigned long ERR_get_error_line(const char **file, int *line);
     427              : OSSL_DEPRECATEDIN_3_0
     428              : unsigned long ERR_get_error_line_data(const char **file, int *line,
     429              :     const char **data, int *flags);
     430              : #endif
     431              : unsigned long ERR_peek_error(void);
     432              : unsigned long ERR_peek_error_line(const char **file, int *line);
     433              : unsigned long ERR_peek_error_func(const char **func);
     434              : unsigned long ERR_peek_error_data(const char **data, int *flags);
     435              : unsigned long ERR_peek_error_all(const char **file, int *line,
     436              :     const char **func,
     437              :     const char **data, int *flags);
     438              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     439              : OSSL_DEPRECATEDIN_3_0
     440              : unsigned long ERR_peek_error_line_data(const char **file, int *line,
     441              :     const char **data, int *flags);
     442              : #endif
     443              : unsigned long ERR_peek_last_error(void);
     444              : unsigned long ERR_peek_last_error_line(const char **file, int *line);
     445              : unsigned long ERR_peek_last_error_func(const char **func);
     446              : unsigned long ERR_peek_last_error_data(const char **data, int *flags);
     447              : unsigned long ERR_peek_last_error_all(const char **file, int *line,
     448              :     const char **func,
     449              :     const char **data, int *flags);
     450              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     451              : OSSL_DEPRECATEDIN_3_0
     452              : unsigned long ERR_peek_last_error_line_data(const char **file, int *line,
     453              :     const char **data, int *flags);
     454              : #endif
     455              : 
     456              : void ERR_clear_error(void);
     457              : 
     458              : char *ERR_error_string(unsigned long e, char *buf);
     459              : void ERR_error_string_n(unsigned long e, char *buf, size_t len);
     460              : const char *ERR_lib_error_string(unsigned long e);
     461              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     462              : OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e);
     463              : #endif
     464              : const char *ERR_reason_error_string(unsigned long e);
     465              : 
     466              : void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u),
     467              :     void *u);
     468              : #ifndef OPENSSL_NO_STDIO
     469              : void ERR_print_errors_fp(FILE *fp);
     470              : #endif
     471              : void ERR_print_errors(BIO *bp);
     472              : 
     473              : void ERR_add_error_data(int num, ...);
     474              : void ERR_add_error_vdata(int num, va_list args);
     475              : void ERR_add_error_txt(const char *sepr, const char *txt);
     476              : void ERR_add_error_mem_bio(const char *sep, BIO *bio);
     477              : 
     478              : int ERR_load_strings(int lib, ERR_STRING_DATA *str);
     479              : int ERR_load_strings_const(const ERR_STRING_DATA *str);
     480              : int ERR_unload_strings(int lib, ERR_STRING_DATA *str);
     481              : 
     482              : #ifndef OPENSSL_NO_DEPRECATED_1_1_0
     483              : #define ERR_load_crypto_strings() \
     484              :     OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
     485              : #define ERR_free_strings() \
     486              :     while (0)              \
     487              :     continue
     488              : #endif
     489              : #ifndef OPENSSL_NO_DEPRECATED_1_1_0
     490              : OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *);
     491              : #endif
     492              : #ifndef OPENSSL_NO_DEPRECATED_1_0_0
     493              : OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid);
     494              : #endif
     495              : #ifndef OPENSSL_NO_DEPRECATED_3_0
     496              : OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void);
     497              : #endif
     498              : 
     499              : int ERR_get_next_error_library(void);
     500              : 
     501              : int ERR_set_mark(void);
     502              : int ERR_pop_to_mark(void);
     503              : int ERR_clear_last_mark(void);
     504              : int ERR_count_to_mark(void);
     505              : int ERR_pop(void);
     506              : 
     507              : ERR_STATE *OSSL_ERR_STATE_new(void);
     508              : void OSSL_ERR_STATE_save(ERR_STATE *es);
     509              : void OSSL_ERR_STATE_save_to_mark(ERR_STATE *es);
     510              : void OSSL_ERR_STATE_restore(const ERR_STATE *es);
     511              : void OSSL_ERR_STATE_free(ERR_STATE *es);
     512              : 
     513              : #ifdef __cplusplus
     514              : }
     515              : #endif
     516              : 
     517              : #endif
        

Generated by: LCOV version 2.0-1