]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2618. [bug] The sdb and sdlz db_interator_seek() methods could
authorMark Andrews <marka@isc.org>
Fri, 26 Jun 2009 06:25:44 +0000 (06:25 +0000)
committerMark Andrews <marka@isc.org>
Fri, 26 Jun 2009 06:25:44 +0000 (06:25 +0000)
                        loop infinitely. [RT #19847]

CHANGES
lib/dns/sdb.c
lib/dns/sdlz.c

diff --git a/CHANGES b/CHANGES
index 53289f0acfe5fc69a042eecd890534e47c68f436..2813f00438691b10dde2e3b8af79adc7089d18d1 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2618.  [bug]           The sdb and sdlz db_interator_seek() methods could
+                       loop infinitely. [RT #19847]
+
 2617.  [bug]           ifconfig.sh failed to emit an error message when
                        run from the wrong location. [RT #19375]
 
index 03fca9ed63e66d6e84f96c88ed9bc8862d9dbfaf..ab9ff1967f687d06394c51da8b20ce1aaeba1dc4 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: sdb.c,v 1.66.48.2 2009/04/21 23:47:18 tbox Exp $ */
+/* $Id: sdb.c,v 1.66.48.3 2009/06/26 06:25:44 marka Exp $ */
 
 /*! \file */
 
@@ -1458,9 +1458,11 @@ dbiterator_seek(dns_dbiterator_t *iterator, dns_name_t *name) {
        sdb_dbiterator_t *sdbiter = (sdb_dbiterator_t *)iterator;
 
        sdbiter->current = ISC_LIST_HEAD(sdbiter->nodelist);
-       while (sdbiter->current != NULL)
+       while (sdbiter->current != NULL) {
                if (dns_name_equal(sdbiter->current->name, name))
                        return (ISC_R_SUCCESS);
+               sdbiter->current = ISC_LIST_NEXT(sdbiter->current, link);
+       }
        return (ISC_R_NOTFOUND);
 }
 
index 89cd0eea2a704f5af9b8f24465489c6c0c21da13..5e5f7e3d7a25f2ceecfb8b15ff05d1091b060c60 100644 (file)
@@ -50,7 +50,7 @@
  * USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: sdlz.c,v 1.18.50.2 2009/04/21 23:47:18 tbox Exp $ */
+/* $Id: sdlz.c,v 1.18.50.3 2009/06/26 06:25:44 marka Exp $ */
 
 /*! \file */
 
@@ -1117,9 +1117,11 @@ dbiterator_seek(dns_dbiterator_t *iterator, dns_name_t *name) {
        sdlz_dbiterator_t *sdlziter = (sdlz_dbiterator_t *)iterator;
 
        sdlziter->current = ISC_LIST_HEAD(sdlziter->nodelist);
-       while (sdlziter->current != NULL)
+       while (sdlziter->current != NULL) {
                if (dns_name_equal(sdlziter->current->name, name))
                        return (ISC_R_SUCCESS);
+               sdlziter->current = ISC_LIST_NEXT(sdlziter->current, link);
+       }
        return (ISC_R_NOTFOUND);
 }