From 8e588d67646a0d97dc3e15cb7b64bcf464f0e0ea Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Sat, 17 Apr 2021 22:37:21 +0200 Subject: [PATCH] Fix random string generation Our variable `alphabet` contains 62 alphanumeric symbols + '\0'. When we use sizeof(alphabet) we will get 63 due to that. But we want to choose a random numbers from the 62 alphanumeric letters only. This mistake caused us to have strings with a max length of `length` instead of the exact length. When doing https://github.com/profanity-im/profanity/issues/1520 this caused our algo for muc reflection to not catch since we expect the random ID to be exactly 15 symbols long in `message_is_sent_by_us()`. --- src/common.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common.c b/src/common.c index eca444e6..6020b8c3 100644 --- a/src/common.c +++ b/src/common.c @@ -441,13 +441,14 @@ get_random_string(int length) GRand* prng; char* rand; char alphabet[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int endrange = sizeof(alphabet) - 1; rand = calloc(length + 1, sizeof(char)); prng = g_rand_new(); for (int i = 0; i < length; i++) { - rand[i] = alphabet[g_rand_int_range(prng, 0, sizeof(alphabet))]; + rand[i] = alphabet[g_rand_int_range(prng, 0, endrange)]; } g_rand_free(prng);