make copies of RRs before returning them
@@ -171,7 +171,12 @@ func (z *Zone) Lookup(ctx context.Context, state request.Request, qname string)
return z.externalLookup(ctx, state, elem, rrs)
}
- rrs := elem.Type(qtype)
+ treeRRs := elem.Type(qtype)
+ // make a copy of the element RRs to prevent response writers from mutating the tree
+ rrs := make([]dns.RR, len(treeRRs))
+ for i, rr := range treeRRs {
+ rrs[i] = dns.Copy(rr)
+ }
// NODATA
if len(rrs) == 0 {
