reftable/stack: fix use of unseeded randomness
When writing a new reftable stack, Git will first create the stack with a random suffix so that concurrent updates will not try to write to the same file. This random suffix is computed via a call to rand(3P). But we never seed the function via srand(3P), which means that the suffix is in fact always the same. Fix this bug by using `git_rand()` instead, which does not need to be initialized. While this function is likely going to be slower depending on the platform, this slowness should not matter in practice as we only use it when writing a new reftable stack. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Dec 11, 2023 at 10:07 UTC
9abda98149e0f164ac0532fc6ca89b337049b9c3
2 files changed
+4
-4
reftable/readwrite_test.c
+3
-3
@@ -141,8 +141,8 @@ static void test_log_buffer_size(void)
141
*/
142
uint8_t hash1[GIT_SHA1_RAWSZ], hash2[GIT_SHA1_RAWSZ];
143
for (i = 0; i < GIT_SHA1_RAWSZ; i++) {
144
- hash1[i] = (uint8_t)(rand() % 256);
145
- hash2[i] = (uint8_t)(rand() % 256);
144
+ hash1[i] = (uint8_t)(git_rand() % 256);
145
+ hash2[i] = (uint8_t)(git_rand() % 256);
146
}
147
log.value.update.old_hash = hash1;
148
log.value.update.new_hash = hash2;
@@ -320,7 +320,7 @@ static void test_log_zlib_corruption(void)
320
};
321
322
for (i = 0; i < sizeof(message) - 1; i++)
323
- message[i] = (uint8_t)(rand() % 64 + ' ');
323
+ message[i] = (uint8_t)(git_rand() % 64 + ' ');
324
325
reftable_writer_set_limits(w, 1, 1);
326
reftable/stack.c
+1
-1
@@ -434,7 +434,7 @@ int reftable_stack_add(struct reftable_stack *st,
434
static void format_name(struct strbuf *dest, uint64_t min, uint64_t max)
435
{
436
char buf[100];
437
- uint32_t rnd = (uint32_t)rand();
437
+ uint32_t rnd = (uint32_t)git_rand();
438
snprintf(buf, sizeof(buf), "0x%012" PRIx64 "-0x%012" PRIx64 "-%08x",
439
min, max, rnd);
440
strbuf_reset(dest);