diff options
Diffstat (limited to 'src/libknot/packet/packet.c')
-rw-r--r-- | src/libknot/packet/packet.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libknot/packet/packet.c b/src/libknot/packet/packet.c index ed73afa..82b65c6 100644 --- a/src/libknot/packet/packet.c +++ b/src/libknot/packet/packet.c @@ -112,6 +112,18 @@ static void knot_packet_init_pointers_response(knot_packet_t *pkt) pkt->compression.max = DEFAULT_DOMAINS_IN_RESPONSE; pkt->compression.default_count = DEFAULT_DOMAINS_IN_RESPONSE; + // wildcard nodes and SNAMEs associated with them + pkt->wildcard_nodes.nodes = (const knot_node_t **)pos; + pos += DEFAULT_WILDCARD_NODES * sizeof(const knot_node_t *); + pkt->wildcard_nodes.snames = (const knot_dname_t **)pos; + pos += DEFAULT_WILDCARD_NODES * sizeof(knot_dname_t *); + + dbg_packet("Wildcard nodes: %p\n", pkt->wildcard_nodes.nodes); + dbg_packet("Wildcard SNAMEs: %p\n", pkt->wildcard_nodes.snames); + + pkt->wildcard_nodes.default_count = DEFAULT_WILDCARD_NODES; + pkt->wildcard_nodes.max = DEFAULT_WILDCARD_NODES; + pkt->tmp_rrsets = (const knot_rrset_t **)pos; pos += DEFAULT_TMP_RRSETS * sizeof(const knot_rrset_t *); @@ -639,6 +651,11 @@ static void knot_packet_free_allocated_space(knot_packet_t *pkt) free(pkt->compression.offsets); } + if (pkt->wildcard_nodes.max > pkt->wildcard_nodes.default_count) { + free(pkt->wildcard_nodes.nodes); + free(pkt->wildcard_nodes.snames); + } + if (pkt->tmp_rrsets_max > DEFAULT_RRSET_COUNT(TMP_RRSETS, pkt)) { free(pkt->tmp_rrsets); } @@ -1460,6 +1477,10 @@ void knot_packet_free(knot_packet_t **packet) dbg_packet("Freeing tmp RRSets...\n"); knot_packet_free_tmp_rrsets(*packet); + /*! \note The above code will free the domain names pointed to by + * the list of wildcard nodes. It should not matter, however. + */ + // check if some additional space was allocated for the packet dbg_packet("Freeing additional allocated space...\n"); knot_packet_free_allocated_space(*packet); |