{"record":{"id":"9f79540438c322c9","repo":"ruby/ruby","slug":"e-message-9f7954","errorCode":null,"errorMessage":"e.message","messagePattern":"e\\.message","errorType":"exception","errorClass":"Resolv::DNS::DecodeError","httpStatus":null,"severity":"error","filePath":"lib/resolv.rb","lineNumber":1739,"sourceCode":"        def get_label\n          return Label::Str.new(self.get_string)\n        end\n\n        def get_question\n          name = self.get_name\n          type, klass = self.get_unpack(\"nn\")\n          return name, Resource.get_class(type, klass)\n        end\n\n        def get_rr\n          name = self.get_name\n          type, klass, ttl = self.get_unpack('nnN')\n          typeclass = Resource.get_class(type, klass)\n          res = self.get_length16 do\n            begin\n              typeclass.decode_rdata self\n            rescue => e\n              raise DecodeError, e.message, e.backtrace\n            end\n          end\n          res.instance_variable_set :@ttl, ttl\n          return name, ttl, res\n        end\n      end\n    end\n\n    ##\n    # SvcParams for service binding RRs. [RFC9460]\n\n    class SvcParams\n      include Enumerable\n\n      ##\n      # Create a list of SvcParams with the given initial content.\n      #\n      # +params+ has to be an enumerable of +SvcParam+s.","sourceCodeStart":1721,"sourceCodeEnd":1757,"githubUrl":"https://github.com/ruby/ruby/blob/0e5b888e1c355f3f728f2659f085820937dada48/lib/resolv.rb#L1721-L1757","documentation":"While decoding each resource record in a DNS message, Resolv::DNS::Message::MessageDecoder#get_rr calls the record type's decode_rdata inside begin/rescue and re-raises any failure as Resolv::DNS::DecodeError, preserving the original message and backtrace. The message you see is the underlying error text (bad lengths, malformed RDATA, broken SVCB params), so this error means a response contained an RR whose data does not parse.","triggerScenarios":"A resolver or middlebox returns corrupt or truncated RDATA (short A/AAAA records, malformed SVCB/HTTPS SvcParams); decoding raw captured DNS packets with Resolv::DNS::Message.decode; querying servers that answer with private/nonstandard record encodings; custom Resource classes whose decode_rdata is buggy.","commonSituations":"Security/monitoring tools decoding pcaps or passive DNS data; hitting broken or malicious resolvers; on-path devices mangling responses; testing custom RR implementations.","solutions":["Rescue Resolv::DNS::DecodeError wherever you call Resolv::DNS queries or Message.decode and treat the response as unusable","Retry against a different nameserver; a single bad server should not break resolution","Verify with dig against the same server to confirm the record is genuinely malformed","If a specific RR type fails, upgrade Ruby — resolv decoder fixes (including SVCB/HTTPS params) land in patch releases"],"exampleFix":"# before\nanswer = Resolv::DNS::Message.decode(packet_bytes)\n# => Resolv::DNS::DecodeError: received short packet / similar\n\n# after\nbegin\n  answer = Resolv::DNS::Message.decode(packet_bytes)\nrescue Resolv::DNS::DecodeError => e\n  warn \"dropping malformed DNS response: #{e.message}\"\n  answer = nil\nend","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"begin\n  message = Resolv::DNS::Message.decode(bytes)\nrescue Resolv::DNS::DecodeError => e\n  # network-supplied data is untrusted; drop or flag the response\n  warn \"malformed DNS response from peer: #{e.message}\"\n  retry_with_next_nameserver\nend","preventionTips":["Treat every DNS response as untrusted input; decode inside rescue DecodeError","Keep a fallback nameserver so one corrupt responder cannot stall resolution","Pin your Ruby version in CI and watch resolv changelogs when handling SVCB/HTTPS records"],"tags":["resolv","dns","decode","malformed-response","network","stdlib","ruby"],"backgroundTag":"malformed-response-decode","analyzedSha":"0e5b888e1c355f3f728f2659f085820937dada48","analyzedAt":"2026-08-21T14:25:43.473Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}