Merge commit from fork

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>
This commit is contained in:
Ville Vesilehto
2026-07-16 03:54:46 +03:00
committed by GitHub
parent d5e54040ff
commit 530b0a5ff2
5 changed files with 66 additions and 8 deletions

View File

@@ -0,0 +1,29 @@
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")
}
}