]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
validator: stricter filtering of "failed" ranks from answer
authorVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 17 Apr 2020 09:14:12 +0000 (11:14 +0200)
committerPetr Špaček <petr.spacek@nic.cz>
Mon, 27 Apr 2020 07:24:47 +0000 (09:24 +0200)
It appears possible that a KR_RANK_MISSING record might still get into
answer in some edge cases, so let's be more defensive.  See cce8d9355.

lib/layer/validate.c

index 2fa89d23df7e096a62b6769ad2cf79e303a2eeed..96bb6033e6b686aed22655bbe72103b35fe19a79 100644 (file)
@@ -1180,12 +1180,14 @@ static int hide_bogus(kr_layer_t *ctx) {
         */
        const ranked_rr_array_t *sel[] = kr_request_selected(ctx->req);
        for (knot_section_t sect = KNOT_ANSWER; sect <= KNOT_ADDITIONAL; ++sect) {
-                for (size_t i = 0; i < sel[sect]->len; ++i) {
-                         ranked_rr_array_entry_t *e = sel[sect]->at[i];
-                         if (kr_rank_test(e->rank, KR_RANK_BOGUS)) {
-                                  e->to_wire = false;
-                         }
-                }
+               for (size_t i = 0; i < sel[sect]->len; ++i) {
+                       ranked_rr_array_entry_t *e = sel[sect]->at[i];
+                       e->to_wire = e->to_wire
+                               && !kr_rank_test(e->rank, KR_RANK_INDET)
+                               && !kr_rank_test(e->rank, KR_RANK_BOGUS)
+                               && !kr_rank_test(e->rank, KR_RANK_MISMATCH)
+                               && !kr_rank_test(e->rank, KR_RANK_MISSING);
+               }
        }
        return ctx->state;
 }