aboutsummaryrefslogtreecommitdiffstats
path: root/librecrypt_make_settings.c
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 /librecrypt_make_settings.c
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 'librecrypt_make_settings.c')
-rw-r--r--librecrypt_make_settings.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/librecrypt_make_settings.c b/librecrypt_make_settings.c
index 7688061..5bdc6f5 100644
--- a/librecrypt_make_settings.c
+++ b/librecrypt_make_settings.c
@@ -97,40 +97,48 @@ main(void)
#if defined(SUPPORT_ARGON2I)
saltbyte = 0u;
+ CANARY_FILL(buf);
r = librecrypt_make_settings(buf, sizeof(buf), "$argon2i$", 8192u << 10, (uintmax_t)81920u, 1, &saltgen, &saltbyte);
EXPECT(r > 0 && (size_t)r < sizeof(buf));
EXPECT(!buf[r] && (size_t)r == strlen(buf));
EXPECT(!strcmp(buf, "$argon2i$v=19$m=8192,t=10,p=1$AAAAAAAAAAAAAAAAAAAAAA$*32"));
+ CANARY_CHECK(buf, (size_t)r + 1u);
any_supported = 1;
any_salted = 1;
#endif
#if defined(SUPPORT_ARGON2D)
saltbyte = 0u;
+ CANARY_FILL(buf);
r = librecrypt_make_settings(buf, sizeof(buf), "$argon2d$", 8192u << 10, (uintmax_t)81920u, 1, &saltgen, &saltbyte);
EXPECT(r > 0 && (size_t)r < sizeof(buf));
EXPECT(!buf[r] && (size_t)r == strlen(buf));
EXPECT(!strcmp(buf, "$argon2d$v=19$m=8192,t=10,p=1$AAAAAAAAAAAAAAAAAAAAAA$*32"));
+ CANARY_CHECK(buf, (size_t)r + 1u);
any_supported = 1;
any_salted = 1;
#endif
#if defined(SUPPORT_ARGON2ID)
saltbyte = 0u;
+ CANARY_FILL(buf);
r = librecrypt_make_settings(buf, sizeof(buf), "$argon2id$", 8192u << 10, (uintmax_t)81920u, 1, &saltgen, &saltbyte);
EXPECT(r > 0 && (size_t)r < sizeof(buf));
EXPECT(!buf[r] && (size_t)r == strlen(buf));
EXPECT(!strcmp(buf, "$argon2id$v=19$m=8192,t=10,p=1$AAAAAAAAAAAAAAAAAAAAAA$*32"));
+ CANARY_CHECK(buf, (size_t)r + 1u);
any_supported = 1;
any_salted = 1;
#endif
#if defined(SUPPORT_ARGON2DS)
saltbyte = 0u;
+ CANARY_FILL(buf);
r = librecrypt_make_settings(buf, sizeof(buf), "$argon2ds$", 8192u << 10, (uintmax_t)81920u, 1, &saltgen, &saltbyte);
EXPECT(r > 0 && (size_t)r < sizeof(buf));
EXPECT(!buf[r] && (size_t)r == strlen(buf));
EXPECT(!strcmp(buf, "$argon2ds$v=19$m=8192,t=10,p=1$AAAAAAAAAAAAAAAAAAAAAA$*32"));
+ CANARY_CHECK(buf, (size_t)r + 1u);
any_supported = 1;
any_salted = 1;
#endif
@@ -147,26 +155,38 @@ main(void)
EXPECT(librecrypt_make_settings(buf, sizeof(buf), NULL, 0u, 0u, 1, &saltfail, NULL) > 0);
}
+ CANARY_FILL(buf);
+ CANARY_FILL(buf2);
r = librecrypt_make_settings(buf, sizeof(buf), NULL, 0u, 0u, 0, &saltfail, NULL);
EXPECT(r > 0 && (size_t)r < sizeof(buf));
EXPECT(!buf[r] && (size_t)r == strlen(buf));
EXPECT(librecrypt_make_settings(buf2, sizeof(buf2), NULL, 0u, 0u, 0, &saltfail, NULL) == r);
EXPECT(!buf2[r] && (size_t)r == strlen(buf2));
EXPECT(!strcmp(buf, buf2));
+ CANARY_CHECK(buf, (size_t)r + 1u);
+ CANARY_CHECK(buf2, (size_t)r + 1u);
+ CANARY_FILL(buf);
+ CANARY_FILL(buf2);
r = librecrypt_make_settings(buf, sizeof(buf), NULL, 0u, 0u, 0, NULL, NULL);
EXPECT(r > 0 && (size_t)r < sizeof(buf));
EXPECT(!buf[r] && (size_t)r == strlen(buf));
EXPECT(librecrypt_make_settings(buf2, sizeof(buf2), NULL, 0u, 0u, 0, NULL, NULL) == r);
EXPECT(!buf2[r] && (size_t)r == strlen(buf2));
EXPECT(!strcmp(buf, buf2));
+ CANARY_CHECK(buf, (size_t)r + 1u);
+ CANARY_CHECK(buf2, (size_t)r + 1u);
+ CANARY_FILL(buf);
+ CANARY_FILL(buf2);
r = librecrypt_make_settings(buf, sizeof(buf), NULL, 0u, 0u, 1, NULL, NULL);
EXPECT(r > 0 && (size_t)r < sizeof(buf));
EXPECT(!buf[r] && (size_t)r == strlen(buf));
EXPECT(librecrypt_make_settings(buf2, sizeof(buf2), NULL, 0u, 0u, 1, NULL, NULL) == r);
EXPECT(!buf2[r] && (size_t)r == strlen(buf2));
EXPECT(strcmp(buf, buf2));
+ CANARY_CHECK(buf, (size_t)r + 1u);
+ CANARY_CHECK(buf2, (size_t)r + 1u);
} else {
errno = 0;
EXPECT(librecrypt_make_settings(NULL, 0u, NULL, 0u, 0u, 0, NULL, NULL) == -1);