diff options
| author | Mattias Andrée <m@maandree.se> | 2026-05-14 22:20:02 +0200 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-05-14 22:20:02 +0200 |
| commit | f07a9f80fb6f3099d75534c1e64f448d4b397931 (patch) | |
| tree | 30ebf4afafb0e66226fa7f642db083341c8c96e4 /common.h | |
| parent | librecrypt.h: add @since (diff) | |
| download | librecrypt-f07a9f80fb6f3099d75534c1e64f448d4b397931.tar.gz librecrypt-f07a9f80fb6f3099d75534c1e64f448d4b397931.tar.bz2 librecrypt-f07a9f80fb6f3099d75534c1e64f448d4b397931.tar.xz | |
Fix minor errors in the test and check that we are not writing out of bounds
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to '')
| -rw-r--r-- | common.h | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -556,4 +556,30 @@ int librecrypt_check_settings_(const char *settings, size_t len, const char *fmt exit(2);\ }\ } while (0) + +# define CANARY_FILL(BUF) CANARY_C_FILL(99, BUF) +# define CANARY_CHECK(BUF, OFF) CANARY_C_CHECK(99, BUF, OFF) +# define CANARY_X_CHECK(BUF, OFF1, OFF2) CANARY_XC_CHECK(99, BUF, OFF1, OFF2) + +# define CANARY_C_FILL(C, BUF)\ + memset((BUF), (C), sizeof(BUF)) + +# define CANARY_C_CHECK(C, BUF, OFF)\ + do {\ + size_t canary_i__;\ + for (canary_i__ = (OFF); canary_i__ < sizeof(BUF); canary_i__++)\ + EXPECT(((unsigned char *)(BUF))[canary_i__] == (unsigned char)(C));\ + } while (0) + +# define CANARY_XC_CHECK(C, BUF, OFF1, OFF2)\ + CANARY_XCC_CHECK(0, C, BUF, OFF1, OFF2) + +# define CANARY_XCC_CHECK(C1, C2, BUF, OFF1, OFF2)\ + do {\ + if ((OFF2) > (OFF1))\ + CANARY_C_CHECK((C2), (BUF), (OFF2));\ + memset(&(BUF)[(OFF1)], (C1), sizeof(BUF) - (OFF1));\ + CANARY_C_CHECK((C1), (BUF), (OFF1));\ + } while (0) + #endif |
