summaryrefslogtreecommitdiffstats
path: root/source/tdb
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2005-02-24 01:07:09 +0000
committerJeremy Allison <jra@samba.org>2005-02-24 01:07:09 +0000
commit74dc5006165ed72e9434649b50928132252db680 (patch)
tree7f428f0eab53604531417802b8b1bf46bb877bbf /source/tdb
parent9dc1267c4367d5cd12b9ba6128e513aa5ae4037a (diff)
downloadsamba-74dc5006165ed72e9434649b50928132252db680.tar.gz
samba-74dc5006165ed72e9434649b50928132252db680.tar.xz
samba-74dc5006165ed72e9434649b50928132252db680.zip
r5532: Patch to detect infinite loops when traversing a tdb from "Shlomi Yaakobovich" <Shlomi@exanet.com>
Jeremy.
Diffstat (limited to 'source/tdb')
-rw-r--r--source/tdb/tdb.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c
index 45895d2ec71..b3d596f4428 100644
--- a/source/tdb/tdb.c
+++ b/source/tdb/tdb.c
@@ -1272,6 +1272,13 @@ static int tdb_next_lock(TDB_CONTEXT *tdb, struct tdb_traverse_lock *tlock,
goto fail;
return tlock->off;
}
+
+ /* Detect infinite loops. From "Shlomi Yaakobovich" <Shlomi@exanet.com>. */
+ if (tlock->off == rec->next) {
+ TDB_LOG((tdb, 0, "tdb_next_lock: loop detected.\n"));
+ goto fail;
+ }
+
/* Try to clean dead ones from old traverses */
current = tlock->off;
tlock->off = rec->next;