Avoid ifdefs in trace categories

The trace code assumes all categories are present and
the category numbers are equal to the index in the table.

Fixes #19915

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
(Merged from https://github.com/openssl/openssl/pull/19917)

(cherry picked from commit 78bd646b2f)
This commit is contained in:
Tomas Mraz 2022-12-15 11:45:48 +01:00
parent 0c5fe6e4e7
commit e1f09938ca
2 changed files with 9 additions and 18 deletions

View File

@ -118,17 +118,16 @@ struct trace_category_st {
}; };
#define TRACE_CATEGORY_(name) { #name, OSSL_TRACE_CATEGORY_##name } #define TRACE_CATEGORY_(name) { #name, OSSL_TRACE_CATEGORY_##name }
static const struct trace_category_st trace_categories[] = { static const struct trace_category_st
trace_categories[OSSL_TRACE_CATEGORY_NUM] = {
TRACE_CATEGORY_(ALL), TRACE_CATEGORY_(ALL),
TRACE_CATEGORY_(TRACE), TRACE_CATEGORY_(TRACE),
TRACE_CATEGORY_(INIT), TRACE_CATEGORY_(INIT),
TRACE_CATEGORY_(TLS), TRACE_CATEGORY_(TLS),
TRACE_CATEGORY_(TLS_CIPHER), TRACE_CATEGORY_(TLS_CIPHER),
TRACE_CATEGORY_(CONF), TRACE_CATEGORY_(CONF),
#ifndef OPENSSL_NO_ENGINE
TRACE_CATEGORY_(ENGINE_TABLE), TRACE_CATEGORY_(ENGINE_TABLE),
TRACE_CATEGORY_(ENGINE_REF_COUNT), TRACE_CATEGORY_(ENGINE_REF_COUNT),
#endif
TRACE_CATEGORY_(PKCS5V2), TRACE_CATEGORY_(PKCS5V2),
TRACE_CATEGORY_(PKCS12_KEYGEN), TRACE_CATEGORY_(PKCS12_KEYGEN),
TRACE_CATEGORY_(PKCS12_DECRYPT), TRACE_CATEGORY_(PKCS12_DECRYPT),
@ -144,22 +143,16 @@ static const struct trace_category_st trace_categories[] = {
const char *OSSL_trace_get_category_name(int num) const char *OSSL_trace_get_category_name(int num)
{ {
size_t i; if (num < 0 || (size_t)num >= OSSL_NELEM(trace_categories))
return NULL;
/* /*
* Partial check that OSSL_TRACE_CATEGORY_... macros * Partial check that OSSL_TRACE_CATEGORY_... macros
* are synced with trace_categories array * are synced with trace_categories array
*/ */
#ifndef OPENSSL_NO_ENGINE if (!ossl_assert(trace_categories[num].name != NULL)
if (!ossl_assert(OSSL_TRACE_CATEGORY_NUM == OSSL_NELEM(trace_categories))) || !ossl_assert(trace_categories[num].num == num))
return NULL; return NULL;
#endif return trace_categories[num].name;
for (i = 0; i < OSSL_NELEM(trace_categories); i++)
if (trace_categories[i].num == num)
return trace_categories[i].name;
return NULL; /* not found */
} }
int OSSL_trace_get_category_num(const char *name) int OSSL_trace_get_category_num(const char *name)

View File

@ -43,10 +43,8 @@ extern "C" {
# define OSSL_TRACE_CATEGORY_TLS 3 # define OSSL_TRACE_CATEGORY_TLS 3
# define OSSL_TRACE_CATEGORY_TLS_CIPHER 4 # define OSSL_TRACE_CATEGORY_TLS_CIPHER 4
# define OSSL_TRACE_CATEGORY_CONF 5 # define OSSL_TRACE_CATEGORY_CONF 5
# ifndef OPENSSL_NO_ENGINE # define OSSL_TRACE_CATEGORY_ENGINE_TABLE 6
# define OSSL_TRACE_CATEGORY_ENGINE_TABLE 6 # define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT 7
# define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT 7
# endif
# define OSSL_TRACE_CATEGORY_PKCS5V2 8 # define OSSL_TRACE_CATEGORY_PKCS5V2 8
# define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN 9 # define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN 9
# define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT 10 # define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT 10