aboutsummaryrefslogtreecommitdiffstats
path: root/common.h
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-05-14 22:20:02 +0200
committerMattias Andrée <m@maandree.se>2026-05-14 22:20:02 +0200
commitf07a9f80fb6f3099d75534c1e64f448d4b397931 (patch)
tree30ebf4afafb0e66226fa7f642db083341c8c96e4 /common.h
parentlibrecrypt.h: add @since (diff)
downloadlibrecrypt-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.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/common.h b/common.h
index f64399a..02b99fa 100644
--- a/common.h
+++ b/common.h
@@ -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