replace various calls to sprintf() by BiO_snprintf() to avoid compiler warnings, e.g., on MacOS

Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com>
Reviewed-by: Saša Nedvědický <sashan@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/25534)
This commit is contained in:
Dr. David von Oheimb 2024-09-24 21:24:39 +02:00
parent b2474b287f
commit 2c536c8b15
16 changed files with 77 additions and 56 deletions

View File

@ -353,7 +353,7 @@ static int CreateSocketPair (int SocketFamily,
/* /*
** Get the binary (64-bit) time of the specified timeout value ** Get the binary (64-bit) time of the specified timeout value
*/ */
sprintf (AscTimeBuff, "0 0:0:%02d.00", SOCKET_PAIR_TIMEOUT_VALUE); BIO_snprintf(AscTimeBuff, sizeof(AscTimeBuff), "0 0:0:%02d.00", SOCKET_PAIR_TIMEOUT_VALUE);
AscTimeDesc.dsc$w_length = strlen (AscTimeBuff); AscTimeDesc.dsc$w_length = strlen (AscTimeBuff);
AscTimeDesc.dsc$a_pointer = AscTimeBuff; AscTimeDesc.dsc$a_pointer = AscTimeBuff;
status = sys$bintim (&AscTimeDesc, BinTimeBuff); status = sys$bintim (&AscTimeDesc, BinTimeBuff);
@ -567,10 +567,10 @@ static void LogMessage (char *msg, ...)
/* /*
** Format the message buffer ** Format the message buffer
*/ */
sprintf (MsgBuff, "%02d-%s-%04d %02d:%02d:%02d [%08X] %s\n", BIO_snprintf(MsgBuff, sizeof(MsgBuff), "%02d-%s-%04d %02d:%02d:%02d [%08X] %s\n",
LocTime->tm_mday, Month[LocTime->tm_mon], LocTime->tm_mday, Month[LocTime->tm_mon],
(LocTime->tm_year + 1900), LocTime->tm_hour, LocTime->tm_min, (LocTime->tm_year + 1900), LocTime->tm_hour, LocTime->tm_min,
LocTime->tm_sec, pid, msg); LocTime->tm_sec, pid, msg);
/* /*
** Get any variable arguments and add them to the print of the message ** Get any variable arguments and add them to the print of the message

View File

@ -589,7 +589,8 @@ static char *shacrypt(const char *passwd, const char *magic, const char *salt)
OPENSSL_strlcat(out_buf, ascii_dollar, sizeof(out_buf)); OPENSSL_strlcat(out_buf, ascii_dollar, sizeof(out_buf));
if (rounds_custom) { if (rounds_custom) {
char tmp_buf[80]; /* "rounds=999999999" */ char tmp_buf[80]; /* "rounds=999999999" */
sprintf(tmp_buf, "rounds=%u", rounds);
BIO_snprintf(tmp_buf, sizeof(tmp_buf), "rounds=%u", rounds);
#ifdef CHARSET_EBCDIC #ifdef CHARSET_EBCDIC
/* In case we're really on a ASCII based platform and just pretend */ /* In case we're really on a ASCII based platform and just pretend */
if (tmp_buf[0] != 0x72) /* ASCII 'r' */ if (tmp_buf[0] != 0x72) /* ASCII 'r' */

View File

@ -2624,13 +2624,13 @@ int speed_main(int argc, char **argv)
if (doit[D_HMAC]) { if (doit[D_HMAC]) {
static const char hmac_key[] = "This is a key..."; static const char hmac_key[] = "This is a key...";
int len = strlen(hmac_key); int len = strlen(hmac_key);
size_t hmac_name_len = sizeof("hmac()") + strlen(evp_mac_mdname);
OSSL_PARAM params[3]; OSSL_PARAM params[3];
if (evp_mac_mdname == NULL) if (evp_mac_mdname == NULL)
goto end; goto end;
evp_hmac_name = app_malloc(sizeof("hmac()") + strlen(evp_mac_mdname), evp_hmac_name = app_malloc(hmac_name_len, "HMAC name");
"HMAC name"); BIO_snprintf(evp_hmac_name, hmac_name_len, "hmac(%s)", evp_mac_mdname);
sprintf(evp_hmac_name, "hmac(%s)", evp_mac_mdname);
names[D_HMAC] = evp_hmac_name; names[D_HMAC] = evp_hmac_name;
params[0] = params[0] =
@ -2894,6 +2894,7 @@ int speed_main(int argc, char **argv)
} }
if (doit[D_EVP_CMAC]) { if (doit[D_EVP_CMAC]) {
size_t len = sizeof("cmac()") + strlen(evp_mac_ciphername);
OSSL_PARAM params[3]; OSSL_PARAM params[3];
EVP_CIPHER *cipher = NULL; EVP_CIPHER *cipher = NULL;
@ -2906,9 +2907,8 @@ int speed_main(int argc, char **argv)
BIO_printf(bio_err, "\nRequested CMAC cipher with unsupported key length.\n"); BIO_printf(bio_err, "\nRequested CMAC cipher with unsupported key length.\n");
goto end; goto end;
} }
evp_cmac_name = app_malloc(sizeof("cmac()") evp_cmac_name = app_malloc(len, "CMAC name");
+ strlen(evp_mac_ciphername), "CMAC name"); BIO_snprintf(evp_cmac_name, len, "cmac(%s)", evp_mac_ciphername);
sprintf(evp_cmac_name, "cmac(%s)", evp_mac_ciphername);
names[D_EVP_CMAC] = evp_cmac_name; names[D_EVP_CMAC] = evp_cmac_name;
params[0] = OSSL_PARAM_construct_utf8_string(OSSL_ALG_PARAM_CIPHER, params[0] = OSSL_PARAM_construct_utf8_string(OSSL_ALG_PARAM_CIPHER,

View File

@ -281,7 +281,7 @@ static void xsyslog(BIO *bp, int priority, const char *string)
break; break;
} }
sprintf(pidbuf, "[%lu] ", GetCurrentProcessId()); BIO_snprintf(pidbuf, sizeof(pidbuf), "[%lu] ", GetCurrentProcessId());
lpszStrings[0] = pidbuf; lpszStrings[0] = pidbuf;
lpszStrings[1] = string; lpszStrings[1] = string;

View File

@ -229,13 +229,12 @@ static char *dl_name_converter(DSO *dso, const char *filename)
ERR_raise(ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED); ERR_raise(ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED);
return NULL; return NULL;
} }
if (transform) { if (transform)
if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) BIO_snprintf(translated, rsize,
sprintf(translated, "lib%s%s", filename, DSO_EXTENSION); (DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0
else ? "lib%s%s" : "%s%s", filename, DSO_EXTENSION);
sprintf(translated, "%s%s", filename, DSO_EXTENSION); else
} else BIO_snprintf(translated, rsize, "%s", filename);
sprintf(translated, "%s", filename);
return translated; return translated;
} }

View File

@ -265,11 +265,12 @@ static char *dlfcn_name_converter(DSO *dso, const char *filename)
} }
if (transform) { if (transform) {
if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
sprintf(translated, "lib%s" DSO_EXTENSION, filename); BIO_snprintf(translated, rsize, "lib%s" DSO_EXTENSION, filename);
else else
sprintf(translated, "%s" DSO_EXTENSION, filename); BIO_snprintf(translated, rsize, "%s" DSO_EXTENSION, filename);
} else } else {
sprintf(translated, "%s", filename); BIO_snprintf(translated, rsize, "%s", filename);
}
return translated; return translated;
} }

View File

@ -444,24 +444,20 @@ static char *win32_name_converter(DSO *dso, const char *filename)
char *translated; char *translated;
int len, transform; int len, transform;
len = strlen(filename);
transform = ((strstr(filename, "/") == NULL) && transform = ((strstr(filename, "/") == NULL) &&
(strstr(filename, "\\") == NULL) && (strstr(filename, "\\") == NULL) &&
(strstr(filename, ":") == NULL)); (strstr(filename, ":") == NULL));
/* If transform != 0, then we convert to %s.dll, else just dupe filename */
len = strlen(filename) + 1;
if (transform) if (transform)
/* We will convert this to "%s.dll" */ len += strlen(".dll");
translated = OPENSSL_malloc(len + 5); translated = OPENSSL_malloc(len);
else
/* We will simply duplicate filename */
translated = OPENSSL_malloc(len + 1);
if (translated == NULL) { if (translated == NULL) {
ERR_raise(ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED); ERR_raise(ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED);
return NULL; return NULL;
} }
if (transform) BIO_snprintf(translated, len, "%s%s", filename, transform ? ".dll" : "");
sprintf(translated, "%s.dll", filename);
else
sprintf(translated, "%s", filename);
return translated; return translated;
} }

View File

@ -190,10 +190,10 @@ DEFINE_RUN_ONCE_STATIC(init_info_strings)
#endif #endif
#ifndef OPENSSL_NO_JITTER #ifndef OPENSSL_NO_JITTER
{ {
char jent_version_string[32]; char buf[32];
sprintf(jent_version_string, "JITTER (%d)", jent_version()); BIO_snprintf(buf, sizeof(buf), "JITTER (%d)", jent_version());
add_seeds_string(jent_version_string); add_seeds_string(buf);
} }
#endif #endif
seed_sources = seeds; seed_sources = seeds;

View File

@ -327,13 +327,15 @@ err:
return ret; return ret;
} }
#define OSSL_HEX_CHARS_PER_BYTE 2
static char *pt(unsigned char *md, unsigned int len) static char *pt(unsigned char *md, unsigned int len)
{ {
unsigned int i; unsigned int i;
static char buf[80]; static char buf[81];
for (i = 0; i < len; i++) for (i = 0; i < len && (i + 1) * OSSL_HEX_CHARS_PER_BYTE < sizeof(buf); i++)
sprintf(&(buf[i * 2]), "%02x", md[i]); BIO_snprintf(buf + i * OSSL_HEX_CHARS_PER_BYTE,
OSSL_HEX_CHARS_PER_BYTE + 1, "%02x", md[i]);
return buf; return buf;
} }

View File

@ -186,7 +186,7 @@ static int test_check_overflow(void)
char max[(sizeof(long) * 8) / 3 + 3]; char max[(sizeof(long) * 8) / 3 + 3];
char *p; char *p;
p = max + sprintf(max, "0%ld", LONG_MAX) - 1; p = max + BIO_snprintf(max, sizeof(max), "0%ld", LONG_MAX) - 1;
setenv("FNORD", max, 1); setenv("FNORD", max, 1);
if (!TEST_true(NCONF_get_number(NULL, "missing", "FNORD", &val)) if (!TEST_true(NCONF_get_number(NULL, "missing", "FNORD", &val))
|| !TEST_long_eq(val, LONG_MAX)) || !TEST_long_eq(val, LONG_MAX))

View File

@ -417,7 +417,7 @@ static int test_rand_reseed_on_fork(EVP_RAND_CTX *primary,
presult[0].pindex = presult[1].pindex = i; presult[0].pindex = presult[1].pindex = i;
sprintf(presult[0].name, "child %d", i); BIO_snprintf(presult[0].name, sizeof(presult[0].name), "child %d", i);
strcpy(presult[1].name, presult[0].name); strcpy(presult[1].name, presult[0].name);
/* collect the random output of the children */ /* collect the random output of the children */

View File

@ -147,9 +147,9 @@ static int test_engines(void)
TEST_info("About to beef up the engine-type list"); TEST_info("About to beef up the engine-type list");
for (loop = 0; loop < NUMTOADD; loop++) { for (loop = 0; loop < NUMTOADD; loop++) {
sprintf(buf, "id%d", loop); BIO_snprintf(buf, sizeof(buf), "id%d", loop);
eid[loop] = OPENSSL_strdup(buf); eid[loop] = OPENSSL_strdup(buf);
sprintf(buf, "Fake engine type %d", loop); BIO_snprintf(buf, sizeof(buf), "Fake engine type %d", loop);
ename[loop] = OPENSSL_strdup(buf); ename[loop] = OPENSSL_strdup(buf);
if (!TEST_ptr(block[loop] = ENGINE_new()) if (!TEST_ptr(block[loop] = ENGINE_new())
|| !TEST_true(ENGINE_set_id(block[loop], eid[loop])) || !TEST_true(ENGINE_set_id(block[loop], eid[loop]))

View File

@ -275,19 +275,21 @@ static int test_hmac_copy_uninited(void)
return res; return res;
} }
# ifndef OPENSSL_NO_MD5 #ifndef OPENSSL_NO_MD5
# define OSSL_HEX_CHARS_PER_BYTE 2
static char *pt(unsigned char *md, unsigned int len) static char *pt(unsigned char *md, unsigned int len)
{ {
unsigned int i; unsigned int i;
static char buf[200]; static char buf[201];
if (md == NULL) if (md == NULL)
return NULL; return NULL;
for (i = 0; i < len; i++) for (i = 0; i < len && (i + 1) * OSSL_HEX_CHARS_PER_BYTE < sizeof(buf); i++)
sprintf(&(buf[i * 2]), "%02x", md[i]); BIO_snprintf(buf + i * OSSL_HEX_CHARS_PER_BYTE,
OSSL_HEX_CHARS_PER_BYTE + 1, "%02x", md[i]);
return buf; return buf;
} }
# endif #endif
static struct test_chunks_st { static struct test_chunks_st {
const char *md_name; const char *md_name;

View File

@ -16,6 +16,8 @@
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <stdarg.h>
/* /*
* When built as an object file to link the application with, we get the * When built as an object file to link the application with, we get the
* init function name through the macro PROVIDER_INIT_FUNCTION_NAME. If * init function name through the macro PROVIDER_INIT_FUNCTION_NAME. If
@ -46,6 +48,7 @@ static OSSL_FUNC_core_get_params_fn *c_get_params = NULL;
static OSSL_FUNC_core_new_error_fn *c_new_error; static OSSL_FUNC_core_new_error_fn *c_new_error;
static OSSL_FUNC_core_set_error_debug_fn *c_set_error_debug; static OSSL_FUNC_core_set_error_debug_fn *c_set_error_debug;
static OSSL_FUNC_core_vset_error_fn *c_vset_error; static OSSL_FUNC_core_vset_error_fn *c_vset_error;
static OSSL_FUNC_BIO_vsnprintf_fn *c_BIO_vsnprintf;
/* Tell the core what params we provide and what type they are */ /* Tell the core what params we provide and what type they are */
static const OSSL_PARAM p_param_types[] = { static const OSSL_PARAM p_param_types[] = {
@ -60,6 +63,17 @@ static OSSL_FUNC_provider_get_params_fn p_get_params;
static OSSL_FUNC_provider_get_reason_strings_fn p_get_reason_strings; static OSSL_FUNC_provider_get_reason_strings_fn p_get_reason_strings;
static OSSL_FUNC_provider_teardown_fn p_teardown; static OSSL_FUNC_provider_teardown_fn p_teardown;
static int local_snprintf(char *buf, size_t n, const char *format, ...)
{
va_list args;
int ret;
va_start(args, format);
ret = (*c_BIO_vsnprintf)(buf, n, format, args);
va_end(args);
return ret;
}
static void p_set_error(int lib, int reason, const char *file, int line, static void p_set_error(int lib, int reason, const char *file, int line,
const char *func, const char *fmt, ...) const char *func, const char *fmt, ...)
{ {
@ -114,11 +128,11 @@ static int p_get_params(void *provctx, OSSL_PARAM params[])
const char *versionp = *(void **)counter_request[0].data; const char *versionp = *(void **)counter_request[0].data;
const char *namep = *(void **)counter_request[1].data; const char *namep = *(void **)counter_request[1].data;
sprintf(buf, "Hello OpenSSL %.20s, greetings from %s!", local_snprintf(buf, sizeof(buf), "Hello OpenSSL %.20s, greetings from %s!",
versionp, namep); versionp, namep);
} }
} else { } else {
sprintf(buf, "Howdy stranger..."); local_snprintf(buf, sizeof(buf), "Howdy stranger...");
} }
p->return_size = buf_l = strlen(buf) + 1; p->return_size = buf_l = strlen(buf) + 1;
@ -250,6 +264,9 @@ int OSSL_provider_init(const OSSL_CORE_HANDLE *handle,
case OSSL_FUNC_CORE_VSET_ERROR: case OSSL_FUNC_CORE_VSET_ERROR:
c_vset_error = OSSL_FUNC_core_vset_error(in); c_vset_error = OSSL_FUNC_core_vset_error(in);
break; break;
case OSSL_FUNC_BIO_VSNPRINTF:
c_BIO_vsnprintf = OSSL_FUNC_BIO_vsnprintf(in);
break;
default: default:
/* Just ignore anything we don't understand */ /* Just ignore anything we don't understand */
break; break;

View File

@ -365,7 +365,8 @@ static int test_single_key(PKCS12_ENC *enc)
char fname[80]; char fname[80];
PKCS12_BUILDER *pb; PKCS12_BUILDER *pb;
sprintf(fname, "1key_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter); BIO_snprintf(fname, sizeof(fname), "1key_ciph-%s_iter-%d.p12",
OBJ_nid2sn(enc->nid), enc->iter);
pb = new_pkcs12_builder(fname); pb = new_pkcs12_builder(fname);
@ -464,7 +465,8 @@ static int test_single_cert_mac(PKCS12_ENC *mac)
char fname[80]; char fname[80];
PKCS12_BUILDER *pb; PKCS12_BUILDER *pb;
sprintf(fname, "1cert_mac-%s_iter-%d.p12", OBJ_nid2sn(mac->nid), mac->iter); BIO_snprintf(fname, sizeof(fname), "1cert_mac-%s_iter-%d.p12",
OBJ_nid2sn(mac->nid), mac->iter);
pb = new_pkcs12_builder(fname); pb = new_pkcs12_builder(fname);
@ -624,7 +626,8 @@ static int test_single_secret(PKCS12_ENC *enc)
char fname[80]; char fname[80];
PKCS12_BUILDER *pb; PKCS12_BUILDER *pb;
sprintf(fname, "1secret_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter); BIO_snprintf(fname, sizeof(fname), "1secret_ciph-%s_iter-%d.p12",
OBJ_nid2sn(enc->nid), enc->iter);
pb = new_pkcs12_builder(fname); pb = new_pkcs12_builder(fname);
custom_nid = get_custom_oid(); custom_nid = get_custom_oid();

View File

@ -190,7 +190,7 @@ static int compare_hex_encoded_buffer(const char *hex_encoded,
return 1; return 1;
for (i = j = 0; i < raw_length && j + 1 < hex_length; i++, j += 2) { for (i = j = 0; i < raw_length && j + 1 < hex_length; i++, j += 2) {
sprintf(hexed, "%02x", raw[i]); BIO_snprintf(hexed, sizeof(hexed), "%02x", raw[i]);
if (!TEST_int_eq(hexed[0], hex_encoded[j]) if (!TEST_int_eq(hexed[0], hex_encoded[j])
|| !TEST_int_eq(hexed[1], hex_encoded[j + 1])) || !TEST_int_eq(hexed[1], hex_encoded[j + 1]))
return 1; return 1;