commit d555cea0cda80640296647e1a15547c11217652a
parent cca48439b82f6d21c9b82a6b85d8e5a0b70335e6
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date: Mon, 31 Aug 2026 22:39:47 +0200
Replaced some asserts with static asserts
Diffstat:
4 files changed, 78 insertions(+), 35 deletions(-)
diff --git a/src/mhd2/auth_digest.c b/src/mhd2/auth_digest.c
@@ -50,6 +50,7 @@
#include "mhd_digest_auth_data.h"
#include "mhd_assert.h"
+#include "mhd_static_assert.h"
#include "mhd_unreachable.h"
#include "mhd_assume.h"
@@ -1381,15 +1382,22 @@ mhd_static_inline size_t
digest_get_hash_size (enum MHD_DigestAuthAlgo algo)
{
#ifdef MHD_SUPPORT_MD5
- mhd_assert (MHD_MD5_DIGEST_SIZE == mhd_MD5_DIGEST_SIZE);
+ mhd_STATIC_ASSERT_STMT (MHD_MD5_DIGEST_SIZE == mhd_MD5_DIGEST_SIZE,
+ "Public and internal MD5 digest sizes must match");
#endif /* MHD_SUPPORT_MD5 */
#ifdef MHD_SUPPORT_SHA256
- mhd_assert (MHD_SHA256_DIGEST_SIZE == mhd_SHA256_DIGEST_SIZE);
+ mhd_STATIC_ASSERT_STMT (
+ MHD_SHA256_DIGEST_SIZE == mhd_SHA256_DIGEST_SIZE,
+ "Public and internal SHA-256 digest sizes must match");
#endif /* MHD_SUPPORT_SHA256 */
#ifdef MHD_SUPPORT_SHA512_256
- mhd_assert (MHD_SHA512_256_DIGEST_SIZE == mhd_SHA512_256_DIGEST_SIZE);
+ mhd_STATIC_ASSERT_STMT (
+ MHD_SHA512_256_DIGEST_SIZE == mhd_SHA512_256_DIGEST_SIZE,
+ "Public and internal SHA-512/256 digest sizes must match");
# ifdef MHD_SUPPORT_SHA256
- mhd_assert (mhd_SHA256_DIGEST_SIZE == mhd_SHA512_256_DIGEST_SIZE);
+ mhd_STATIC_ASSERT_STMT (
+ mhd_SHA256_DIGEST_SIZE == mhd_SHA512_256_DIGEST_SIZE,
+ "SHA-256 and SHA-512/256 digest sizes must match");
# endif /* MHD_SUPPORT_SHA256 */
#endif /* MHD_SUPPORT_SHA512_256 */
/* Only one algorithm must be specified */
diff --git a/src/mhd2/daemon_start.c b/src/mhd2/daemon_start.c
@@ -45,6 +45,7 @@
#include "mhd_sys_options.h"
#include "mhd_assert.h"
+#include "mhd_static_assert.h"
#include "mhd_unreachable.h"
#include "mhd_assume.h"
@@ -464,7 +465,9 @@ create_bind_listen_stream_socket_inner (struct MHD_Daemon *restrict d,
memcpy (&(sa_all.sa_i4), s->bind_sa.v_sa, sizeof(sa_all.sa_i4));
sk_port = (uint_least16_t)ntohs (sa_all.sa_i4.sin_port);
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- mhd_assert (sizeof(sa_all.sa_i4) == (uint8_t)sizeof(sa_all.sa_i4));
+ mhd_STATIC_ASSERT_STMT (
+ sizeof(sa_all.sa_i4) == (uint8_t)sizeof(sa_all.sa_i4),
+ "The sockaddr_in size must fit into uint8_t");
sa_all.sa_i4.sin_len = (uint8_t)sizeof(sa_all.sa_i4);
#endif
p_use_sa = (struct sockaddr *)&(sa_all.sa_i4);
@@ -483,7 +486,9 @@ create_bind_listen_stream_socket_inner (struct MHD_Daemon *restrict d,
memcpy (&(sa_all.sa_i6), s->bind_sa.v_sa, s->bind_sa.v_sa_len);
sk_port = (uint_least16_t)ntohs (sa_all.sa_i6.sin6_port);
# ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
- mhd_assert (sizeof(sa_all.sa_i6) == (uint8_t)sizeof(sa_all.sa_i6));
+ mhd_STATIC_ASSERT_STMT (
+ sizeof(sa_all.sa_i6) == (uint8_t)sizeof(sa_all.sa_i6),
+ "The sockaddr_in6 size must fit into uint8_t");
sa_all.sa_i6.sin6_len = (uint8_t)sizeof(sa_all.sa_i6);
# endif
p_use_sa = (struct sockaddr *)&(sa_all.sa_i6);
diff --git a/src/mhd2/h2/hpack/mhd_hpack_codec.c b/src/mhd2/h2/hpack/mhd_hpack_codec.c
@@ -57,6 +57,7 @@
#include "mhd_align.h"
#include "mhd_assert.h"
+#include "mhd_static_assert.h"
#include "mhd_unreachable.h"
#include "mhd_predict.h"
@@ -4045,8 +4046,10 @@ stbl_get_hpack_idx_from_pos (dtbl_idx_ft loc_pos)
MHD_FN_CONST_ mhd_static_inline const struct mhd_HpackStaticEntry *
stbl_pos_entry_info (dtbl_idx_ft loc_pos)
{
- mhd_assert (sizeof(mhd_hpack_static) / sizeof(mhd_hpack_static[0]) \
- == mhd_HPACK_STBL_ENTRIES);
+ mhd_STATIC_ASSERT_STMT (
+ sizeof(mhd_hpack_static) / sizeof(mhd_hpack_static[0]) \
+ == mhd_HPACK_STBL_ENTRIES,
+ "The HPACK static table size must match mhd_HPACK_STBL_ENTRIES");
mhd_assert (mhd_HPACK_STBL_ENTRIES > loc_pos);
return mhd_hpack_static + loc_pos;
}
@@ -5898,17 +5901,31 @@ hpack_enc_field (struct mhd_HpackEncContext *restrict hk_enc,
mhd_assert ((value->size & 0xFFFFFFFFu) == value->size);
/* Check the enum values order */
- // TODO: replace with static asserts
- mhd_assert (mhd_HPACK_ENC_POL_FORCED_NEW_IDX < mhd_HPACK_ENC_POL_FORCED);
- mhd_assert (mhd_HPACK_ENC_POL_ALWAYS_IF_FIT < mhd_HPACK_ENC_POL_NOT_INDEXED);
- mhd_assert (mhd_HPACK_ENC_POL_ALWAYS_IF_FIT < mhd_HPACK_ENC_POL_DESIRABLE);
- mhd_assert (mhd_HPACK_ENC_POL_DESIRABLE < mhd_HPACK_ENC_POL_LOWEST_PRIO);
- mhd_assert (mhd_HPACK_ENC_POL_LOWEST_PRIO < mhd_HPACK_ENC_POL_AVOID_NEW_IDX);
- mhd_assert (mhd_HPACK_ENC_POL_AVOID_NEW_IDX < mhd_HPACK_ENC_POL_NOT_INDEXED);
- mhd_assert (mhd_HPACK_ENC_POL_NOT_INDEXED < \
- mhd_HPACK_ENC_POL_NEVER_W_NAME_IDX);
- mhd_assert (mhd_HPACK_ENC_POL_NEVER_W_NAME_IDX < \
- mhd_HPACK_ENC_POL_NEVER_W_NAME_LIT_NO_HUFFMAN);
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_FORCED_NEW_IDX < mhd_HPACK_ENC_POL_FORCED,
+ "The HPACK encoding policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_ALWAYS_IF_FIT < mhd_HPACK_ENC_POL_NOT_INDEXED,
+ "The HPACK encoding policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_ALWAYS_IF_FIT < mhd_HPACK_ENC_POL_DESIRABLE,
+ "The HPACK encoding policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_DESIRABLE < mhd_HPACK_ENC_POL_LOWEST_PRIO,
+ "The HPACK encoding policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_LOWEST_PRIO < mhd_HPACK_ENC_POL_AVOID_NEW_IDX,
+ "The HPACK encoding policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_AVOID_NEW_IDX < mhd_HPACK_ENC_POL_NOT_INDEXED,
+ "The HPACK encoding policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_NOT_INDEXED < mhd_HPACK_ENC_POL_NEVER_W_NAME_IDX,
+ "The HPACK encoding policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_POL_NEVER_W_NAME_IDX < \
+ mhd_HPACK_ENC_POL_NEVER_W_NAME_LIT_NO_HUFFMAN,
+ "The HPACK encoding policy values must be ordered");
if ((mhd_HPACK_ENC_POL_FORCED <= enc_pol)
&& (mhd_HPACK_ENC_POL_AVOID_NEW_IDX >= enc_pol))
@@ -6411,21 +6428,31 @@ hpack_enc_pf_status (struct mhd_HpackEncContext *restrict hk_enc,
mhd_assert (0u != out_buff_size);
/* Check the enum values order */
- // TODO: replace with static asserts
- mhd_assert (mhd_HPACK_ENC_PFS_POL_ALWAYS_NEW_IDX_IF_FIT < \
- mhd_HPACK_ENC_PFS_POL_NORMAL);
- mhd_assert (mhd_HPACK_ENC_PFS_POL_NORMAL < \
- mhd_HPACK_ENC_PFS_POL_AVOID_NEW_IDX);
- mhd_assert (mhd_HPACK_ENC_PFS_POL_AVOID_NEW_IDX < \
- mhd_HPACK_ENC_PFS_POL_STATIC_IDX);
- mhd_assert (mhd_HPACK_ENC_PFS_POL_STATIC_IDX < \
- mhd_HPACK_ENC_PFS_POL_NOT_INDEXED);
- mhd_assert (mhd_HPACK_ENC_PFS_POL_NOT_INDEXED < \
- mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_IDX);
- mhd_assert (mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_IDX < \
- mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_LIT_FORCED);
- mhd_assert (mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_LIT_FORCED < \
- mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_LIT_NO_HUFFMAN);
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_PFS_POL_ALWAYS_NEW_IDX_IF_FIT < \
+ mhd_HPACK_ENC_PFS_POL_NORMAL,
+ "The HPACK status-field policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_PFS_POL_NORMAL < mhd_HPACK_ENC_PFS_POL_AVOID_NEW_IDX,
+ "The HPACK status-field policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_PFS_POL_AVOID_NEW_IDX < mhd_HPACK_ENC_PFS_POL_STATIC_IDX,
+ "The HPACK status-field policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_PFS_POL_STATIC_IDX < mhd_HPACK_ENC_PFS_POL_NOT_INDEXED,
+ "The HPACK status-field policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_PFS_POL_NOT_INDEXED < \
+ mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_IDX,
+ "The HPACK status-field policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_IDX < \
+ mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_LIT_FORCED,
+ "The HPACK status-field policy values must be ordered");
+ mhd_STATIC_ASSERT_STMT (
+ mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_LIT_FORCED < \
+ mhd_HPACK_ENC_PFS_POL_NEVER_W_NAME_LIT_NO_HUFFMAN,
+ "The HPACK status-field policy values must be ordered");
if ((mhd_HPACK_ENC_PFS_POL_NORMAL <= enc_pol)
diff --git a/src/mhd2/sha512_256_mbedtls.c b/src/mhd2/sha512_256_mbedtls.c
@@ -56,6 +56,7 @@
#include <string.h>
#include "mhd_assert.h"
+#include "mhd_static_assert.h"
#include "sha512_256_mbedtls.h"
@@ -85,7 +86,9 @@ mtls_set_sha512_256_iv (struct mhd_Sha512_256CtxMtls *ctx)
if (ctx->ext_error)
return;
- mhd_assert (sizeof(ctx->mbed_ctx.state) == sizeof(iv_sha512_256));
+ mhd_STATIC_ASSERT_STMT (
+ sizeof(ctx->mbed_ctx.state) == sizeof(iv_sha512_256),
+ "The mbedTLS SHA-512 state and SHA-512/256 IV sizes must match");
memcpy (ctx->mbed_ctx.state,
iv_sha512_256,
sizeof(iv_sha512_256));