summaryrefslogtreecommitdiffstats
path: root/crypto/cmp/cmp_util.c
diff options
context:
space:
mode:
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>2021-01-21 12:36:58 +0100
committerDr. David von Oheimb <dev@ddvo.net>2021-02-22 08:49:52 +0100
commit7f90026b3fca9cfd3d9098d358d949d37509a2e5 (patch)
treed91a6f22702f8977560f7ffec75ac0e10e942bc9 /crypto/cmp/cmp_util.c
parent4718326a46ad460fefc5cc240a8599af4b5993c7 (diff)
Handle NULL result of ERR_reason_error_string() in some apps
Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/13920)
Diffstat (limited to 'crypto/cmp/cmp_util.c')
-rw-r--r--crypto/cmp/cmp_util.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/crypto/cmp/cmp_util.c b/crypto/cmp/cmp_util.c
index d246047943..81c7d02d88 100644
--- a/crypto/cmp/cmp_util.c
+++ b/crypto/cmp/cmp_util.c
@@ -155,12 +155,27 @@ void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn)
while ((err = ERR_get_error_all(&file, &line, &func, &data, &flags)) != 0) {
const char *component =
improve_location_name(func, ERR_lib_error_string(err));
+ unsigned long reason = ERR_GET_REASON(err);
+ const char *rs = NULL;
+ char rsbuf[256];
+
+#ifndef OPENSSL_NO_ERR
+ if (ERR_SYSTEM_ERROR(err)) {
+ if (openssl_strerror_r(reason, rsbuf, sizeof(rsbuf)))
+ rs = rsbuf;
+ } else {
+ rs = ERR_reason_error_string(err);
+ }
+#endif
+ if (rs == NULL) {
+ BIO_snprintf(rsbuf, sizeof(rsbuf), "reason(%lu)", reason);
+ rs = rsbuf;
+ }
+ if (data != NULL && (flags & ERR_TXT_STRING) != 0)
+ BIO_snprintf(msg, sizeof(msg), "%s:%s", rs, data);
+ else
+ BIO_snprintf(msg, sizeof(msg), "%s", rs);
- if (!(flags & ERR_TXT_STRING))
- data = NULL;
- BIO_snprintf(msg, sizeof(msg), "%s%s%s", ERR_reason_error_string(err),
- data == NULL || *data == '\0' ? "" : " : ",
- data == NULL ? "" : data);
if (log_fn == NULL) {
#ifndef OPENSSL_NO_STDIO
BIO *bio = BIO_new_fp(stderr, BIO_NOCLOSE);