From 39bbd1cafb2056ee349946073b86da5a7c9c4600 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 30 Nov 2022 10:20:06 +0100 Subject: [PATCH] openssl: prefix errors with '[lib]/[version]: ' To help users understand where this (cryptic) error message comes from. Suggested-by: Philip Sanetra Ref: #10002 Closes #10004 --- lib/vtls/openssl.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c index 0f04fcdb05..a04d849c5b 100644 --- a/lib/vtls/openssl.c +++ b/lib/vtls/openssl.c @@ -895,12 +895,25 @@ static const char *SSL_ERROR_to_str(int err) } } +static size_t ossl_version(char *buffer, size_t size); + /* Return error string for last OpenSSL error */ static char *ossl_strerror(unsigned long error, char *buf, size_t size) { - if(size) + size_t len; + DEBUGASSERT(size); + *buf = '\0'; + + len = ossl_version(buf, size); + DEBUGASSERT(len < (size - 2)); + if(len < (size - 2)) { + buf += len; + size -= (len + 2); + *buf++ = ':'; + *buf++ = ' '; *buf = '\0'; + } #ifdef OPENSSL_IS_BORINGSSL ERR_error_string_n((uint32_t)error, buf, size); @@ -908,7 +921,7 @@ static char *ossl_strerror(unsigned long error, char *buf, size_t size) ERR_error_string_n(error, buf, size); #endif - if(size > 1 && !*buf) { + if(!*buf) { strncpy(buf, (error ? "Unknown error" : "No error"), size); buf[size - 1] = '\0'; } @@ -4492,8 +4505,6 @@ static bool ossl_data_pending(struct Curl_cfilter *cf, return FALSE; } -static size_t ossl_version(char *buffer, size_t size); - static ssize_t ossl_send(struct Curl_cfilter *cf, struct Curl_easy *data, const void *mem,