libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

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:
Msrc/mhd2/auth_digest.c | 16++++++++++++----
Msrc/mhd2/daemon_start.c | 9+++++++--
Msrc/mhd2/h2/hpack/mhd_hpack_codec.c | 83++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
Msrc/mhd2/sha512_256_mbedtls.c | 5++++-
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));