Bouke / DNS

Swift implementation of DNS Records / RR
http://boukehaarsma.nl/DNS
MIT License
64 stars 23 forks source link

Wrong IP address decoding #27

Closed Krivoblotsky closed 4 years ago

Krivoblotsky commented 4 years ago

Environment: SPM. Package version 1.2.0 macOS 10.15.6.

When I use DNS messages with debug configuration everything looks good, but once I switch to release, IP addresses could not be parsed:

Release build:

Request: DNS Request(id: 0, authoritativeAnswer: true, truncation: false, recursionDesired: true, recursionAvailable: false, questions: [DNS.Question(name: "amazon.com", type: A, unique: true, internetClass: A)], answers: [], authorities: [], additional: [])
Response: DNS Response(id: 0, returnCode: 0, authoritativeAnswer: false, truncation: false, recursionDesired: true, recursionAvailable: true, questions: [DNS.Question(name: "amazon.com.", type: A, unique: false, internetClass: A)], answers: [DNS.HostRecord<DNS.IPv4>(name: "amazon.com.", unique: false, internetClass: A, ttl: 31, ip: �[�ޭ�), DNS.HostRecord<DNS.IPv4>(name: "amazon.com.", unique: false, internetClass: A, ttl: 31, ip: �[�ޭ�), DNS.HostRecord<DNS.IPv4>(name: "amazon.com.", unique: false, internetClass: A, ttl: 31, ip: �[�ޭ�)], authorities: [], additional: [])

Debug build:

Request: DNS Request(id: 0, authoritativeAnswer: true, truncation: false, recursionDesired: true, recursionAvailable: false, questions: [DNS.Question(name: "amazon.com", type: A, unique: true, internetClass: A)], answers: [], authorities: [], additional: [])
Response: DNS Response(id: 0, returnCode: 0, authoritativeAnswer: false, truncation: false, recursionDesired: true, recursionAvailable: true, questions: [DNS.Question(name: "amazon.com.", type: A, unique: false, internetClass: A)], answers: [DNS.HostRecord<DNS.IPv4>(name: "amazon.com.", unique: false, internetClass: A, ttl: 55, ip: 176.32.103.205), DNS.HostRecord<DNS.IPv4>(name: "amazon.com.", unique: false, internetClass: A, ttl: 55, ip: 176.32.98.166), DNS.HostRecord<DNS.IPv4>(name: "amazon.com.", unique: false, internetClass: A, ttl: 55, ip: 205.251.242.103)], authorities: [], additional: [])

I need some tome to investigate it more and get the real cause, but as far as I can see now, this this PR https://github.com/Bouke/DNS/pull/25/files fixes the problem.

Bouke commented 4 years ago

Would be interesting to see if this is a known issue with Swift. It looks like the returned pointer from inet_ntop is incorrect in the release build / the "unsafe" pointers behaving differently in the release build. I've merged the PR, thanks.