From: Volker Lendecke Date: Thu, 4 Oct 2018 14:42:45 +0000 (+0200) Subject: tdb: Make get_hash_length circular-safe X-Git-Tag: tdb-1.3.17~1387 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ade339c8c396dbeff44b24a3d0eb4e59f40ff25d;p=thirdparty%2Fsamba.git tdb: Make get_hash_length circular-safe Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/lib/tdb/common/summary.c b/lib/tdb/common/summary.c index c9b5bc4c1d0..a93eb93e734 100644 --- a/lib/tdb/common/summary.c +++ b/lib/tdb/common/summary.c @@ -72,18 +72,26 @@ static size_t tally_mean(const struct tally *tally) static size_t get_hash_length(struct tdb_context *tdb, unsigned int i) { tdb_off_t rec_ptr; + struct tdb_chainwalk_ctx chainwalk; size_t count = 0; if (tdb_ofs_read(tdb, TDB_HASH_TOP(i), &rec_ptr) == -1) return 0; + tdb_chainwalk_init(&chainwalk, rec_ptr); + /* keep looking until we find the right record */ while (rec_ptr) { struct tdb_record r; + bool ok; ++count; if (tdb_rec_read(tdb, rec_ptr, &r) == -1) return 0; rec_ptr = r.next; + ok = tdb_chainwalk_check(tdb, &chainwalk, rec_ptr); + if (!ok) { + return SIZE_MAX; + } } return count; }