From f818ff547dbfd9b614b6df0bc381842b21f42938 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Vavru=C5=A1a?= Date: Tue, 19 May 2015 22:58:24 +0200 Subject: [PATCH] daemon/worker: enforce iteration limit for cached answers --- daemon/worker.c | 5 +++-- lib/layer/iterate.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index a518e2066..a4d1b9de0 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -187,13 +187,14 @@ static int qr_task_step(struct qr_task *task, knot_pkt_t *packet) int state = kr_resolve_consume(&task->req, packet); while (state == KNOT_STATE_PRODUCE) { state = kr_resolve_produce(&task->req, &addr, &sock_type, next_query); + if (++task->iter_count > KR_ITER_LIMIT) { + return qr_task_finalize(task, KNOT_STATE_FAIL); + } } /* We're done, no more iterations needed */ if (state & (KNOT_STATE_DONE|KNOT_STATE_FAIL)) { return qr_task_finalize(task, state); - } else if (++task->iter_count > KR_ITER_LIMIT) { - return qr_task_finalize(task, KNOT_STATE_FAIL); } /* Create connection for iterative query */ diff --git a/lib/layer/iterate.c b/lib/layer/iterate.c index 11cd46638..0aafab424 100644 --- a/lib/layer/iterate.c +++ b/lib/layer/iterate.c @@ -305,7 +305,7 @@ static int process_answer(knot_pkt_t *pkt, struct kr_request *req) } /* Follow canonical name as next SNAME. */ - if (cname != query->sname) { + if (!knot_dname_is_equal(cname, query->sname)) { DEBUG_MSG("<= cname chain, following\n"); struct kr_query *next = kr_rplan_push(&req->rplan, query->parent, cname, query->sclass, query->stype); kr_zonecut_set_sbelt(&next->zone_cut); -- 2.47.2