From bff83b9480c9efe88dfde41f664a5bb7c1cad94c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Wed, 18 Dec 2019 10:54:01 +0100 Subject: [PATCH] Add failure handling when iterators don't end with ISC_R_NOMORE --- lib/dns/zone.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 7bd85fba45..f8b93d406a 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -15501,6 +15501,7 @@ restore_nsec3param(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version, static void receive_secure_db(isc_task_t *task, isc_event_t *event) { isc_result_t result; + isc_result_t iter_result; dns_zone_t *zone; dns_db_t *rawdb, *db = NULL; dns_fixedname_t fname; @@ -15577,6 +15578,7 @@ receive_secure_db(isc_task_t *task, isc_event_t *event) { { dns_dbnode_t *rawnode = NULL, *node = NULL; dns_rdatasetiter_t *rdsit = NULL; + isc_result_t rdsit_result; result = dns_dbiterator_current(dbiterator, &rawnode, name); if (result != ISC_R_SUCCESS) { @@ -15593,7 +15595,7 @@ receive_secure_db(isc_task_t *task, isc_event_t *event) { goto iter_cleanup; } - for (isc_result_t rdsit_result = dns_rdatasetiter_first(rdsit); + for (rdsit_result = dns_rdatasetiter_first(rdsit); rdsit_result == ISC_R_SUCCESS; rdsit_result = dns_rdatasetiter_next(rdsit)) { @@ -15626,6 +15628,11 @@ receive_secure_db(isc_task_t *task, isc_event_t *event) { break; } } + if (rdsit_result != ISC_R_SUCCESS && + rdsit_result != ISC_R_NOMORE) + { + result = rdsit_result; + } dns_rdatasetiter_destroy(&rdsit); iter_cleanup: if (rawnode) { @@ -15638,6 +15645,10 @@ iter_cleanup: break; } } + if (iter_result != ISC_R_SUCCESS && + iter_result != ISC_R_NOMORE) { + result = iter_result; + } dns_dbiterator_destroy(&dbiterator); if (result != ISC_R_SUCCESS) {