{"record":{"id":"53e93e7d633a5803","repo":"coredns/coredns","slug":"multiple-dns-query-values-found","errorCode":null,"errorMessage":"multiple 'dns' query values found","messagePattern":"multiple 'dns' query values found","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/pkg/doh/doh.go","lineNumber":132,"sourceCode":"\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tm, err := dnsutil.UnpackRequest(buf)\n\treturn m, buf, err\n}\n\nconst maxDNSQuerySize = 65536\nconst maxBase64Len = (maxDNSQuerySize*8 + 5) / 6\n\n// requestToMsgGet extract the dns message from the GET request.\nfunc requestToMsgGet(req *http.Request) (*dns.Msg, []byte, error) {\n\tvalues := req.URL.Query()\n\tb64, ok := values[\"dns\"]\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"no 'dns' query parameter found\")\n\t}\n\tif len(b64) != 1 {\n\t\treturn nil, nil, fmt.Errorf(\"multiple 'dns' query values found\")\n\t}\n\tif len(b64[0]) > maxBase64Len {\n\t\treturn nil, nil, fmt.Errorf(\"dns query too large\")\n\t}\n\treturn base64ToMsgWire(b64[0])\n}\n\nfunc toMsg(r io.ReadCloser) (*dns.Msg, error) {\n\tm, _, err := toMsgWire(r)\n\treturn m, err\n}\n\nfunc toMsgWire(r io.ReadCloser) (*dns.Msg, []byte, error) {\n\tbuf, err := io.ReadAll(http.MaxBytesReader(nil, r, maxDNSQuerySize))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tm := new(dns.Msg)","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/coredns/coredns/blob/558c9757a92b361e550bdba82d0b4ddf3d12d595/plugin/pkg/doh/doh.go#L114-L150","documentation":"Validation error in requestToMsgGet. The 'dns' query parameter appears more than once in the request URL, making the DNS message to decode ambiguous; the DoH GET handler rejects the request rather than guessing which value to use.","triggerScenarios":"Thrown at plugin/pkg/doh/doh.go:132 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Send only one 'dns' query parameter per GET request as required by RFC 8484","Remove duplicated or accidental extra 'dns' parameters from the client's URL construction","If parameters may repeat, deduplicate them before sending"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"558c9757a92b361e550bdba82d0b4ddf3d12d595","analyzedAt":"2026-09-06T22:47:02.106Z","contentChangedAt":"2026-09-06T22:47:02.106Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}