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 /librecrypt_add_algorithm.c | |
| 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-- | librecrypt_add_algorithm.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/librecrypt_add_algorithm.c b/librecrypt_add_algorithm.c index cf7f6eb..920577d 100644 --- a/librecrypt_add_algorithm.c +++ b/librecrypt_add_algorithm.c @@ -184,40 +184,55 @@ main(void) #define CHECK(AUGEND, AUGMENT, RESULT)\ do {\ + CANARY_FILL(buf);\ r = librecrypt_add_algorithm(buf, sizeof(buf), (AUGEND), (AUGMENT), NULL);\ EXPECT(r > 0);\ EXPECT((size_t)r == strlen(RESULT));\ assert((size_t)r < sizeof(buf) + 1u);\ EXPECT(!buf[r]);\ EXPECT(!memcmp(buf, (RESULT), (size_t)r));\ + CANARY_CHECK(buf, (size_t)r + 1u);\ \ for (i = (size_t)r + 2u;; i--) {\ - memset(buf, 99, sizeof(buf));\ + CANARY_FILL(buf);\ EXPECT(librecrypt_add_algorithm(buf, i, (AUGEND), (AUGMENT), NULL) == r);\ - if (!i)\ + if (!i) {\ + CANARY_CHECK(buf, 0u);\ break;\ + }\ min = MIN(i - 1u, (size_t)r);\ EXPECT(!buf[min]);\ EXPECT(!memcmp(buf, (RESULT), min));\ + CANARY_CHECK(buf, min + 1u);\ }\ \ EXPECT(librecrypt_add_algorithm(NULL, 0u, (AUGEND), (AUGMENT), NULL) == r);\ \ assert(sizeof(buf) > strlen(AUGEND));\ - stpcpy(buf, (AUGEND));\ \ + CANARY_FILL(buf);\ + stpcpy(buf, (AUGEND));\ EXPECT(librecrypt_add_algorithm(buf, sizeof(buf), buf, (AUGMENT), NULL) == r);\ EXPECT(!buf[r]);\ EXPECT(!memcmp(buf, (RESULT), (size_t)r));\ + n = strlen(AUGEND) + 1u;\ + n = MAX(n, (size_t)r + 1u);\ + CANARY_CHECK(buf, n);\ \ for (i = (size_t)r + 2u;; i--) {\ + CANARY_FILL(buf);\ stpcpy(buf, (AUGEND));\ + n = strlen(AUGEND) + 1u;\ EXPECT(librecrypt_add_algorithm(buf, i, buf, (AUGMENT), NULL) == r);\ - if (!i)\ + if (!i) {\ + CANARY_CHECK(buf, n);\ break;\ + }\ min = MIN(i - 1u, (size_t)r);\ EXPECT(!buf[min]);\ EXPECT(!memcmp(buf, (RESULT), min));\ + n = MAX(n, min + 1u);\ + CANARY_CHECK(buf, n);\ }\ } while (0) @@ -262,10 +277,12 @@ main(void) CHECK("$argon2d$m=8,t=1,p=1$$", "$argon2i$m=8,t=4,p=2$$", "$argon2d$m=8,t=1,p=1$$>" "$argon2i$m=8,t=4,p=2$$"); + CANARY_FILL(buf); errno = 0; EXPECT(librecrypt_add_algorithm(buf, sizeof(buf), "$argon2d$m=8,t=1,p=1$"SALT1"$"HASH1, "$argon2i$m=8,t=4,p=1$$", NULL) == -1); EXPECT(errno == EINVAL); + CANARY_CHECK(buf, sizeof("$argon2d$m=8,t=1,p=1$"SALT1"$"HASH1)); errno = 0; EXPECT(librecrypt_add_algorithm(NULL, 0u, "$argon2d$m=8,t=1,p=1$"SALT1"$"HASH1, @@ -294,32 +311,40 @@ main(void) "$argon2i$m=8,t=4,p=1$"SALT2"$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", expected); if (libtest_have_custom_malloc()) { + CANARY_FILL(buf); libtest_set_alloc_failure_in(1u); errno = 0; EXPECT(librecrypt_add_algorithm(buf, sizeof(buf), "$argon2d$m=8,t=1,p=1$"SALT1"$"HASH1, "$argon2d$m=8,t=1,p=1$"SALT2"$", NULL) == -1); EXPECT(errno == ENOMEM); assert(libtest_get_alloc_failure_in() == 0u); + CANARY_CHECK(buf, 0u); } + CANARY_FILL(buf); errno = 0; EXPECT(librecrypt_add_algorithm(buf, sizeof(buf), "$argon2d$m=8,t=1,p=1$"SALT1"$" "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", "$argon2d$m=8,t=1,p=1$"SALT2"$", NULL) == -1); EXPECT(errno == EINVAL); + CANARY_CHECK(buf, 0u); #endif + CANARY_FILL(buf); errno = 0; EXPECT(librecrypt_add_algorithm(buf, sizeof(buf), "$argon2d$m=8,t=1,p=1$"SALT1"$"HASH1, "$~no~such~algorithm~$", NULL) == -1); EXPECT(errno == ENOSYS); + CANARY_CHECK(buf, sizeof("$argon2d$m=8,t=1,p=1$"SALT1"$"HASH1)); + CANARY_FILL(buf); errno = 0; EXPECT(librecrypt_add_algorithm(buf, sizeof(buf), "$~no~such~algorithm~$"HASH1, "$argon2d$m=8,t=1,p=1$"SALT1"$", NULL) == -1); EXPECT(errno == ENOSYS); + CANARY_CHECK(buf, 0u); STOP_RESOURCE_TEST(); return 0; |
