Skip to content

Commit 1af41b0

Browse files
Segwazerthink
authored andcommitted
fix(mdbx): return instead of assert on invalid input for libfuzzer compatibility
1 parent e63eba0 commit 1af41b0

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

mdbx.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19717,7 +19717,14 @@ __cold int dxb_setup(MDBX_env *env, const int lck_rc, const mdbx_mode_t mode_bit
1971719717
header.geometry.lower, header.geometry.now, header.geometry.upper, pv2pages(header.geometry.shrink_pv),
1971819718
pv2pages(header.geometry.grow_pv), next_txnid);
1971919719

19720-
ENSURE(env, header.unsafe_txnid == recent.txnid);
19720+
if (unlikely(header.unsafe_txnid != recent.txnid))
19721+
{
19722+
const pgno_t recent_pgno = bytes2pgno(env, ptr_dist(recent.ptr_c, env->dxb_mmap.base));
19723+
ERROR("meta[%u] recent steady txnid %" PRIaTXN " != header txnid %" PRIaTXN
19724+
", manual recovery needed",
19725+
recent_pgno, recent.txnid, header.unsafe_txnid);
19726+
return MDBX_CORRUPTED;
19727+
}
1972119728
meta_set_txnid(env, &header, next_txnid);
1972219729
err = dxb_sync_locked(env, env->flags | txn_shrink_allowed, &header, &troika);
1972319730
if (err) {

0 commit comments

Comments
 (0)