diff --git a/src/knot/zone/zone-diff.c b/src/knot/zone/zone-diff.c index 20ec76c7c8d4ee2ac9c7cadf86a84cb7a2205d5b..43cd8bb545e00dfe7098bd7fa3b0726260b49973 100644 --- a/src/knot/zone/zone-diff.c +++ b/src/knot/zone/zone-diff.c @@ -49,38 +49,39 @@ static int knot_zone_diff_load_soas(const knot_zone_contents_t *zone1, return KNOT_EINVAL; } - knot_rrset_t *soa_rrset1 = knot_node_create_rrset(apex1, KNOT_RRTYPE_SOA); - knot_rrset_t *soa_rrset2 = knot_node_create_rrset(apex2, KNOT_RRTYPE_SOA); - if (soa_rrset1 == NULL || soa_rrset2 == NULL) { + knot_rrset_t soa_rrset1 = knot_node_rrset(apex1, KNOT_RRTYPE_SOA); + knot_rrset_t soa_rrset2 = knot_node_rrset(apex2, KNOT_RRTYPE_SOA); + if (knot_rrset_empty(&soa_rrset1) || knot_rrset_empty(&soa_rrset2)) { return KNOT_EINVAL; } - if (knot_rrset_rr_count(soa_rrset1) == 0 || - knot_rrset_rr_count(soa_rrset2) == 0) { - knot_rrset_free(&soa_rrset1, NULL); - knot_rrset_free(&soa_rrset2, NULL); + if (knot_rrset_rr_count(&soa_rrset1) == 0 || + knot_rrset_rr_count(&soa_rrset2) == 0) { return KNOT_EINVAL; } - int64_t soa_serial1 = knot_rrs_soa_serial(&soa_rrset1->rrs); - int64_t soa_serial2 = knot_rrs_soa_serial(&soa_rrset2->rrs); + int64_t soa_serial1 = knot_rrs_soa_serial(&soa_rrset1.rrs); + int64_t soa_serial2 = knot_rrs_soa_serial(&soa_rrset2.rrs); if (knot_serial_compare(soa_serial1, soa_serial2) == 0) { - knot_rrset_free(&soa_rrset1, NULL); - knot_rrset_free(&soa_rrset2, NULL); return KNOT_ENODIFF; } if (knot_serial_compare(soa_serial1, soa_serial2) > 0) { - knot_rrset_free(&soa_rrset1, NULL); - knot_rrset_free(&soa_rrset2, NULL); return KNOT_ERANGE; } assert(changeset); - changeset->soa_from = soa_rrset1; - changeset->soa_to = soa_rrset2; + changeset->soa_from = knot_rrset_copy(&soa_rrset1, NULL); + if (changeset->soa_from == NULL) { + return KNOT_ENOMEM; + } + changeset->soa_to = knot_rrset_copy(&soa_rrset2, NULL); + if (changeset->soa_to == NULL) { + knot_rrset_free(&changeset->soa_from, NULL); + return KNOT_ENOMEM; + } changeset->serial_from = soa_serial1; changeset->serial_to = soa_serial2;