Skip to content

Commit

Permalink
Fix memory leak
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeroen Koekkoek committed Apr 19, 2024
1 parent 2dc764c commit 840a043
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions zonec.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ has_soa(domain_type* domain)
struct zonec_state {
struct namedb *database;
struct domain_table *domains;
struct region *rr_region;
struct zone *zone;
struct domain *domain;
size_t errors;
Expand Down Expand Up @@ -198,7 +199,7 @@ int32_t zonec_accept(
if (class != CLASS_IN)
zone_log(parser, priority, "only class IN is supported");

dname = dname_make(state->database->region, owner->octets, 1);
dname = dname_make(state->rr_region, owner->octets, 1);
assert(dname);
domain = domain_table_insert(state->domains, dname);
assert(domain);
Expand Down Expand Up @@ -228,8 +229,10 @@ int32_t zonec_accept(
snprintf(s, sizeof(s), "%s", domain_to_string(state->zone->apex));
zone_log(parser, priority, "out of zone data: %s is outside the zone for fqdn %s",
s, domain_to_string(domain));
if (!parser->options.secondary)
if (!parser->options.secondary) {
region_free_all(state->rr_region);
return ZONE_SEMANTIC_ERROR;
}
}

/* Do we have this type of rrset already? */
Expand Down Expand Up @@ -281,6 +284,7 @@ int32_t zonec_accept(
region_recycle(state->database->region, rdatas[j].data, size);
}
region_recycle(state->database->region, rdatas, sizeof(*rdatas) * rdata_count);
region_free_all(state->rr_region);
return 0;
}

Expand Down Expand Up @@ -315,6 +319,7 @@ int32_t zonec_accept(
apex_rrset_checks(state->database, rrset, rr->owner);

state->records++;
region_free_all(state->rr_region);
return 0;
}

Expand Down Expand Up @@ -368,8 +373,9 @@ zonec_read(
zone_options_t options;
zone_name_buffer_t name_buffer;
zone_rdata_buffer_t rdata_buffer;
struct rr_region *rr_region = region_create(xalloc, free);
zone_buffers_t buffers = { 1, &name_buffer, &rdata_buffer };
struct zonec_state state = { database, domains, zone, NULL, 0, 0 };
struct zonec_state state = { database, domains, rr_region, zone, NULL, 0, 0 };

origin = domain_dname(zone->apex);
memset(&options, 0, sizeof(options));
Expand All @@ -384,6 +390,7 @@ zonec_read(

/* Parse and process all RRs. */
if (zone_parse(&parser, &options, &buffers, zonefile, &state) != 0) {
region_destroy(state.rr_region);
return state.errors;
}

Expand All @@ -403,6 +410,7 @@ zonec_read(
if(!zone_is_slave(zone->opts) && !check_dname(zone))
state.errors++;

region_destroy(state.rr_region);
return state.errors;
}

Expand Down

0 comments on commit 840a043

Please sign in to comment.