Import from SAMBA's tdb:
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 29 Jul 2009 12:51:34 +0000 (22:21 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 29 Jul 2009 12:51:34 +0000 (22:21 +0930)
commit a91bcbccf8a2243dac57cacec6fdfc9907580f69
Author: Jim McDonough <jmcd@samba.org>
Date:   Thu May 21 16:26:26 2009 -0400

    Detect tight loop in tdb_find()

ccan/tdb/tdb.c

index 82ad6058032066b95e91b844431407b4a53de64b..42d2438b08be960838733f24bd422f6fdbcaad19 100644 (file)
@@ -96,6 +96,11 @@ static tdb_off_t tdb_find(struct tdb_context *tdb, TDB_DATA key, uint32_t hash,
                                      NULL) == 0) {
                        return rec_ptr;
                }
+               /* detect tight infinite loop */
+               if (rec_ptr == r->next) {
+                       TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_find: loop detected.\n"));
+                       return TDB_ERRCODE(TDB_ERR_CORRUPT, 0);
+               }
                rec_ptr = r->next;
        }
        return TDB_ERRCODE(TDB_ERR_NOEXIST, 0);