aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2021-02-01 15:52:50 +0100
committerGravatar GitHub <noreply@github.com> 2021-02-01 06:52:50 -0800
commit03812bb1e7ec6af384976bc4a9fb22f054dece89 (patch)
tree6c47b872bcb2dd3156871a23d0a07d2718f7643f
parent117a389e40832cdbee69bd9daa04ca35611082ff (diff)
downloadcoredns-03812bb1e7ec6af384976bc4a9fb22f054dece89.tar.gz
coredns-03812bb1e7ec6af384976bc4a9fb22f054dece89.tar.zst
coredns-03812bb1e7ec6af384976bc4a9fb22f054dece89.zip
plugin/rewrite: copy msg before rewritting (#4443)
Copy the msg to prevent messing with the (via the pointer) original created message that may be stored in the cache or anything other data store. Signed-off-by: Miek Gieben <miek@miek.nl>
-rw-r--r--plugin/rewrite/reverter.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/plugin/rewrite/reverter.go b/plugin/rewrite/reverter.go
index 00e41454e..9b1de0563 100644
--- a/plugin/rewrite/reverter.go
+++ b/plugin/rewrite/reverter.go
@@ -36,7 +36,10 @@ func NewResponseReverter(w dns.ResponseWriter, r *dns.Msg) *ResponseReverter {
}
// WriteMsg records the status code and calls the underlying ResponseWriter's WriteMsg method.
-func (r *ResponseReverter) WriteMsg(res *dns.Msg) error {
+func (r *ResponseReverter) WriteMsg(res1 *dns.Msg) error {
+ // Deep copy 'res' as to not (e.g). rewrite a message that's also stored in the cache.
+ res := res1.Copy()
+
res.Question[0] = r.originalQuestion
if r.ResponseRewrite {
for _, rr := range res.Answer {