fixes, coddling, and suppressions for clang-tidy complaints:

examples/pem/pem.c: fix stdio stream leaks.

src/ssl.c and src/ssl_load.c: suppress concurrency-mt-unsafe around getenv().  getenv() is threadsafe as long as no threads putenv() or setenv().

wolfssl/openssl/asn1.h: add parentheses to fix bugprone-macro-parentheses in ASN1_EX_TEMPLATE_TYPE(), and suppress misfiring bugprone-macro-parentheses around IMPLEMENT_ASN1_FUNCTIONS().
This commit is contained in:
Daniel Pouzzner
2024-09-30 23:19:49 -05:00
parent ee7f02bbd6
commit 65853a41b9
4 changed files with 21 additions and 8 deletions

View File

@@ -1024,6 +1024,13 @@ int main(int argc, char* argv[])
if (ret < 0) { if (ret < 0) {
fprintf(stderr, "%s\n", wc_GetErrorString(ret)); fprintf(stderr, "%s\n", wc_GetErrorString(ret));
} }
if (in_file != stdin)
(void)fclose(in_file);
if (out_file != stdout)
(void)fclose(out_file);
return (ret == 0) ? 0 : 1; return (ret == 0) ? 0 : 1;
} }

View File

@@ -23984,7 +23984,7 @@ int wolfSSL_RAND_seed(const void* seed, int len)
*/ */
const char* wolfSSL_RAND_file_name(char* fname, unsigned long len) const char* wolfSSL_RAND_file_name(char* fname, unsigned long len)
{ {
#if !defined(NO_FILESYSTEM) && defined(XGETENV) #if !defined(NO_FILESYSTEM) && defined(XGETENV) && !defined(NO_GETENV)
char* rt; char* rt;
WOLFSSL_ENTER("wolfSSL_RAND_file_name"); WOLFSSL_ENTER("wolfSSL_RAND_file_name");
@@ -23995,6 +23995,7 @@ const char* wolfSSL_RAND_file_name(char* fname, unsigned long len)
XMEMSET(fname, 0, len); XMEMSET(fname, 0, len);
/* // NOLINTBEGIN(concurrency-mt-unsafe) */
if ((rt = XGETENV("RANDFILE")) != NULL) { if ((rt = XGETENV("RANDFILE")) != NULL) {
if (len > XSTRLEN(rt)) { if (len > XSTRLEN(rt)) {
XMEMCPY(fname, rt, XSTRLEN(rt)); XMEMCPY(fname, rt, XSTRLEN(rt));
@@ -24004,6 +24005,7 @@ const char* wolfSSL_RAND_file_name(char* fname, unsigned long len)
rt = NULL; rt = NULL;
} }
} }
/* // NOLINTEND(concurrency-mt-unsafe) */
/* $RANDFILE was not set or is too large, check $HOME */ /* $RANDFILE was not set or is too large, check $HOME */
if (rt == NULL) { if (rt == NULL) {
@@ -24011,6 +24013,7 @@ const char* wolfSSL_RAND_file_name(char* fname, unsigned long len)
WOLFSSL_MSG("Environment variable RANDFILE not set"); WOLFSSL_MSG("Environment variable RANDFILE not set");
/* // NOLINTBEGIN(concurrency-mt-unsafe) */
if ((rt = XGETENV("HOME")) == NULL) { if ((rt = XGETENV("HOME")) == NULL) {
#ifdef XALTHOMEVARNAME #ifdef XALTHOMEVARNAME
if ((rt = XGETENV(XALTHOMEVARNAME)) == NULL) { if ((rt = XGETENV(XALTHOMEVARNAME)) == NULL) {
@@ -24023,6 +24026,7 @@ const char* wolfSSL_RAND_file_name(char* fname, unsigned long len)
return NULL; return NULL;
#endif #endif
} }
/* // NOLINTEND(concurrency-mt-unsafe) */
if (len > XSTRLEN(rt) + XSTRLEN(ap)) { if (len > XSTRLEN(rt) + XSTRLEN(ap)) {
fname[0] = '\0'; fname[0] = '\0';

View File

@@ -5099,7 +5099,7 @@ int wolfSSL_CTX_use_RSAPrivateKey(WOLFSSL_CTX* ctx, WOLFSSL_RSA* rsa)
int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX* ctx) int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX* ctx)
{ {
int ret; int ret;
#ifdef XGETENV #if defined(XGETENV) && !defined(NO_GETENV)
char* certDir = NULL; char* certDir = NULL;
char* certFile = NULL; char* certFile = NULL;
word32 flags = 0; word32 flags = 0;
@@ -5109,7 +5109,8 @@ int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX* ctx)
WOLFSSL_ENTER("wolfSSL_CTX_set_default_verify_paths"); WOLFSSL_ENTER("wolfSSL_CTX_set_default_verify_paths");
#ifdef XGETENV #if defined(XGETENV) && !defined(NO_GETENV)
/* // NOLINTBEGIN(concurrency-mt-unsafe) */
certDir = wc_strdup_ex(XGETENV("SSL_CERT_DIR"), DYNAMIC_TYPE_TMP_BUFFER); certDir = wc_strdup_ex(XGETENV("SSL_CERT_DIR"), DYNAMIC_TYPE_TMP_BUFFER);
certFile = wc_strdup_ex(XGETENV("SSL_CERT_FILE"), DYNAMIC_TYPE_TMP_BUFFER); certFile = wc_strdup_ex(XGETENV("SSL_CERT_FILE"), DYNAMIC_TYPE_TMP_BUFFER);
flags = WOLFSSL_LOAD_FLAG_PEM_CA_ONLY; flags = WOLFSSL_LOAD_FLAG_PEM_CA_ONLY;
@@ -5133,6 +5134,7 @@ int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX* ctx)
ret = 0; ret = 0;
} }
} }
/* // NOLINTEND(concurrency-mt-unsafe) */
else else
#endif #endif
@@ -5157,7 +5159,7 @@ int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX* ctx)
#endif #endif
} }
#ifdef XGETENV #if defined(XGETENV) && !defined(NO_GETENV)
XFREE(certFile, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(certFile, NULL, DYNAMIC_TYPE_TMP_BUFFER);
XFREE(certDir, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(certDir, NULL, DYNAMIC_TYPE_TMP_BUFFER);
#endif #endif

View File

@@ -270,8 +270,8 @@ typedef struct WOLFSSL_ASN1_ITEM WOLFSSL_ASN1_ITEM;
(WolfsslAsn1FreeCb)member_type##_free, \ (WolfsslAsn1FreeCb)member_type##_free, \
(WolfsslAsn1i2dCb)i2d_##member_type, \ (WolfsslAsn1i2dCb)i2d_##member_type, \
(WolfsslAsn1d2iCb)d2i_##member_type, \ (WolfsslAsn1d2iCb)d2i_##member_type, \
0, flags & ASN1_TFLG_TAG_MASK ? tag : -1, 0, \ 0, (flags) & ASN1_TFLG_TAG_MASK ? (tag) : -1, 0, \
!!(flags & ASN1_TFLG_EXPLICIT), TRUE } !!((flags) & ASN1_TFLG_EXPLICIT), TRUE }
WOLFSSL_API void *wolfSSL_ASN1_item_new(const WOLFSSL_ASN1_ITEM *tpl); WOLFSSL_API void *wolfSSL_ASN1_item_new(const WOLFSSL_ASN1_ITEM *tpl);
WOLFSSL_API void wolfSSL_ASN1_item_free(void *obj, WOLFSSL_API void wolfSSL_ASN1_item_free(void *obj,
@@ -282,7 +282,7 @@ WOLFSSL_API void* wolfSSL_ASN1_item_d2i(void** dst, const byte **src, long len,
const WOLFSSL_ASN1_ITEM* item); const WOLFSSL_ASN1_ITEM* item);
/* Need function declaration otherwise compiler complains */ /* Need function declaration otherwise compiler complains */
/* // NOLINTBEGIN(readability-named-parameter) */ /* // NOLINTBEGIN(readability-named-parameter,bugprone-macro-parentheses) */
#define IMPLEMENT_ASN1_FUNCTIONS(type) \ #define IMPLEMENT_ASN1_FUNCTIONS(type) \
type *type##_new(void); \ type *type##_new(void); \
type *type##_new(void){ \ type *type##_new(void){ \
@@ -303,7 +303,7 @@ WOLFSSL_API void* wolfSSL_ASN1_item_d2i(void** dst, const byte **src, long len,
return (type*)wolfSSL_ASN1_item_d2i((void**)dst, src, len, \ return (type*)wolfSSL_ASN1_item_d2i((void**)dst, src, len, \
&type##_template_data); \ &type##_template_data); \
} }
/* // NOLINTEND(readability-named-parameter) */ /* // NOLINTEND(readability-named-parameter,bugprone-macro-parentheses) */
#endif /* OPENSSL_ALL */ #endif /* OPENSSL_ALL */