mirror of
https://github.com/coredns/coredns.git
synced 2026-07-17 21:20:11 -04:00
DoH, DoQ, and DNS-over-gRPC unpack messages without the acceptance checks used by UDP and TCP. An unauthenticated request with a large QDCOUNT can therefore force excessive allocations while names are decoded and exhaust server memory. Enforce the same request policy across all server transports. Signed-off-by: Ville Vesilehto <ville@vesilehto.fi>
30 lines
597 B
Go
30 lines
597 B
Go
package dnsutil
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
func TestUnpackRequest(t *testing.T) {
|
|
request := new(dns.Msg)
|
|
request.SetQuestion("example.org.", dns.TypeA)
|
|
|
|
wire, err := request.Pack()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := UnpackRequest(wire); err != nil {
|
|
t.Fatalf("UnpackRequest() rejected a valid request: %v", err)
|
|
}
|
|
|
|
request.Question = append(request.Question, request.Question[0])
|
|
wire, err = request.Pack()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := UnpackRequest(wire); err == nil {
|
|
t.Fatal("UnpackRequest() accepted multiple questions")
|
|
}
|
|
}
|