@@ -772,6 +772,9 @@ typedef struct testVector {
772772#ifndef WC_TEST_EXPORT_SUBTESTS
773773
774774WOLFSSL_TEST_SUBROUTINE wc_test_ret_t macro_test(void);
775+ #ifndef WOLFSSL_NO_FORCE_ZERO
776+ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t forcezero_test(void);
777+ #endif
775778WOLFSSL_TEST_SUBROUTINE wc_test_ret_t error_test(void);
776779WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void);
777780WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base16_test(void);
@@ -2409,6 +2412,13 @@ options: [-s max_relative_stack_bytes] [-m max_relative_heap_memory_bytes]\n\
24092412 else
24102413 TEST_PASS("macro test passed!\n");
24112414
2415+ #ifndef WOLFSSL_NO_FORCE_ZERO
2416+ if ( (ret = forcezero_test()) != 0)
2417+ TEST_FAIL("forcezero test failed!\n", ret);
2418+ else
2419+ TEST_PASS("forcezero test passed!\n");
2420+ #endif
2421+
24122422 if ( (ret = error_test()) != 0)
24132423 TEST_FAIL("error test failed!\n", ret);
24142424 else
@@ -4097,6 +4107,45 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t macro_test(void)
40974107 return ret;
40984108}
40994109
4110+ #ifndef WOLFSSL_NO_FORCE_ZERO
4111+ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t forcezero_test(void)
4112+ {
4113+ /* Test unaligned offsets and lengths. Oversized buffer prevents OOB writes. */
4114+ byte buf[64];
4115+ static const size_t offsets[] = { 0, 1, 2, 3, 7 };
4116+ static const size_t lens[] = { 0, 1, 3, 7, 8, 9, 16, 31 };
4117+ size_t oi, li;
4118+ ForceZero(NULL, 0);
4119+
4120+ for (oi = 0; oi < XELEM_CNT(offsets); oi++) {
4121+ for (li = 0; li < XELEM_CNT(lens); li++) {
4122+ size_t off = offsets[oi];
4123+ size_t len = lens[li];
4124+ size_t i;
4125+
4126+ XMEMSET(buf, 0xA5, sizeof(buf));
4127+ ForceZero(buf + off, len);
4128+
4129+ for (i = 0; i < len; i++) {
4130+ if (buf[off + i] != 0x00)
4131+ return WC_TEST_RET_ENC_NC;
4132+ }
4133+ /* bytes outside [off, off+len) must be untouched */
4134+ for (i = 0; i < off; i++) {
4135+ if (buf[i] != (byte)0xA5)
4136+ return WC_TEST_RET_ENC_NC;
4137+ }
4138+ for (i = off + len; i < sizeof(buf); i++) {
4139+ if (buf[i] != (byte)0xA5)
4140+ return WC_TEST_RET_ENC_NC;
4141+ }
4142+ }
4143+ }
4144+
4145+ return 0;
4146+ }
4147+ #endif
4148+
41004149WOLFSSL_TEST_SUBROUTINE wc_test_ret_t error_test(void)
41014150{
41024151 const char* errStr;
0 commit comments