diff options
author | 2021-02-01 15:52:50 +0100 | |
---|---|---|
committer | 2021-02-01 06:52:50 -0800 | |
commit | 03812bb1e7ec6af384976bc4a9fb22f054dece89 (patch) | |
tree | 6c47b872bcb2dd3156871a23d0a07d2718f7643f | |
parent | 117a389e40832cdbee69bd9daa04ca35611082ff (diff) | |
download | coredns-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.go | 5 |
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 { |