diff options
author | George Hazan <ghazan@miranda.im> | 2020-06-14 13:55:06 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2020-06-14 13:55:06 +0300 |
commit | 52e4ddcd83b3b64bcf97fdfcfa1120c87b7b3eb4 (patch) | |
tree | 991ccd18cf211ae6e956d9d06002e351cd7a174d /libs/libmdbx/src/test/keygen.cc | |
parent | 8862cf78b01bb4b9ae0da13b8e6acbf94f7c1cbe (diff) |
fixes #2450 (Update libmdbx to 0.8.1)
Diffstat (limited to 'libs/libmdbx/src/test/keygen.cc')
-rw-r--r-- | libs/libmdbx/src/test/keygen.cc | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/libs/libmdbx/src/test/keygen.cc b/libs/libmdbx/src/test/keygen.cc index 374537dd6e..05070afe02 100644 --- a/libs/libmdbx/src/test/keygen.cc +++ b/libs/libmdbx/src/test/keygen.cc @@ -78,9 +78,11 @@ void __hot maker::pair(serial_t serial, const buffer &key, buffer &value, assert(mapping.mesh <= mapping.width); assert(mapping.rotate <= mapping.width); assert(mapping.offset <= mask(mapping.width)); - assert(!(key_essentials.flags & - ~(MDBX_INTEGERKEY | MDBX_REVERSEKEY | MDBX_DUPSORT))); - assert(!(value_essentials.flags & ~(MDBX_INTEGERDUP | MDBX_REVERSEDUP))); + assert( + !(key_essentials.flags & ~(essentials::prng_fill_flag | MDBX_INTEGERKEY | + MDBX_REVERSEKEY | MDBX_DUPSORT))); + assert(!(value_essentials.flags & + ~(essentials::prng_fill_flag | MDBX_INTEGERDUP | MDBX_REVERSEDUP))); log_trace("keygen-pair: serial %" PRIu64 ", data-age %" PRIu64, serial, value_age); @@ -213,6 +215,11 @@ void maker::setup(const config::actor_params_pod &actor, unsigned actor_id, (uint32_t)actor.datalen_max, (uint32_t)mdbx_limits_valsize_max(actor.pagesize, key_essentials.flags)); + if (!actor.keygen.zero_fill) { + key_essentials.flags |= essentials::prng_fill_flag; + value_essentials.flags |= essentials::prng_fill_flag; + } + (void)thread_number; mapping = actor.keygen; salt = (actor.keygen.seed + actor_id) * UINT64_C(14653293970879851569); @@ -298,6 +305,10 @@ void __hot maker::mk_begin(const serial_t serial, const essentials ¶ms, void __hot maker::mk_continue(const serial_t serial, const essentials ¶ms, result &out) { + static_assert((essentials::prng_fill_flag & + (MDBX_DUPSORT | MDBX_DUPFIXED | MDBX_INTEGERKEY | + MDBX_INTEGERDUP | MDBX_REVERSEKEY | MDBX_REVERSEDUP)) == 0, + "WTF?"); out.value.iov_base = out.bytes; if (params.flags & (MDBX_INTEGERKEY | MDBX_INTEGERDUP)) { assert(params.maxlen == params.minlen); @@ -308,7 +319,11 @@ void __hot maker::mk_continue(const serial_t serial, const essentials ¶ms, out.u32 = (uint32_t)serial; } else if (params.flags & (MDBX_REVERSEKEY | MDBX_REVERSEDUP)) { if (out.value.iov_len > 8) { - memset(out.bytes, '\0', out.value.iov_len - 8); + if (params.flags & essentials::prng_fill_flag) { + uint64_t state = serial ^ UINT64_C(0x41803711c9b75f19); + prng_fill(state, out.bytes, out.value.iov_len - 8); + } else + memset(out.bytes, '\0', out.value.iov_len - 8); unaligned::store(out.bytes + out.value.iov_len - 8, htobe64(serial)); } else { out.u64 = htobe64(serial); @@ -317,8 +332,13 @@ void __hot maker::mk_continue(const serial_t serial, const essentials ¶ms, } } else { out.u64 = htole64(serial); - if (out.value.iov_len > 8) - memset(out.bytes + 8, '\0', out.value.iov_len - 8); + if (out.value.iov_len > 8) { + if (params.flags & essentials::prng_fill_flag) { + uint64_t state = serial ^ UINT64_C(0x923ab47b7ee6f6e4); + prng_fill(state, out.bytes + 8, out.value.iov_len - 8); + } else + memset(out.bytes + 8, '\0', out.value.iov_len - 8); + } } assert(out.value.iov_len >= params.minlen); |