From 5813ef614f56045959db2c7c78b2c31f29b4d0a4 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sun, 21 Mar 2021 18:17:24 +0530 Subject: [PATCH] default app: fixed null exception bug. --- DefaultDnsApplication/GeoDistanceAddress.cs | 11 +++--- DefaultDnsApplication/GeoDistanceCNAME.cs | 37 +++++++++++---------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/DefaultDnsApplication/GeoDistanceAddress.cs b/DefaultDnsApplication/GeoDistanceAddress.cs index 99f683ed..cdd7fc9b 100644 --- a/DefaultDnsApplication/GeoDistanceAddress.cs +++ b/DefaultDnsApplication/GeoDistanceAddress.cs @@ -113,11 +113,11 @@ namespace DefaultDnsApplication location = response.Location; dynamic jsonAppRecordData = JsonConvert.DeserializeObject(appRecordData); - dynamic jsonLastServer = null; + dynamic jsonClosestServer = null; if ((location == null) || !location.HasCoordinates) { - jsonLastServer = jsonAppRecordData[0]; + jsonClosestServer = jsonAppRecordData[0]; } else { @@ -133,14 +133,17 @@ namespace DefaultDnsApplication if (distance < lastDistance) { lastDistance = distance; - jsonLastServer = jsonServer; + jsonClosestServer = jsonServer; } } } + if (jsonClosestServer == null) + return Task.FromResult(null); + List answers = new List(); - foreach (dynamic jsonAddress in jsonLastServer.addresses) + foreach (dynamic jsonAddress in jsonClosestServer.addresses) { IPAddress address = IPAddress.Parse(jsonAddress.Value); diff --git a/DefaultDnsApplication/GeoDistanceCNAME.cs b/DefaultDnsApplication/GeoDistanceCNAME.cs index d049a58c..e119fa2f 100644 --- a/DefaultDnsApplication/GeoDistanceCNAME.cs +++ b/DefaultDnsApplication/GeoDistanceCNAME.cs @@ -108,11 +108,11 @@ namespace DefaultDnsApplication location = response.Location; dynamic jsonAppRecordData = JsonConvert.DeserializeObject(appRecordData); - dynamic jsonLastServer = null; + dynamic jsonClosestServer = null; if ((location == null) || !location.HasCoordinates) { - jsonLastServer = jsonAppRecordData[0]; + jsonClosestServer = jsonAppRecordData[0]; } else { @@ -128,29 +128,30 @@ namespace DefaultDnsApplication if (distance < lastDistance) { lastDistance = distance; - jsonLastServer = jsonServer; + jsonClosestServer = jsonServer; } } } - dynamic jsonCname = jsonLastServer.cname; - if (jsonCname != null) - { - string cname = jsonCname.Value; - if (!string.IsNullOrEmpty(cname)) - { - IReadOnlyList answers; + if (jsonClosestServer == null) + return Task.FromResult(null); - if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecord(cname)) }; //use ANAME - else - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecord(cname)) }; + dynamic jsonCname = jsonClosestServer.cname; + if (jsonCname == null) + return Task.FromResult(null); - return Task.FromResult(new DnsDatagram(request.Identifier, true, request.OPCODE, true, false, request.RecursionDesired, isRecursionAllowed, false, false, DnsResponseCode.NoError, request.Question, answers)); - } - } + string cname = jsonCname.Value; + if (string.IsNullOrEmpty(cname)) + return Task.FromResult(null); - return Task.FromResult(null); + IReadOnlyList answers; + + if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex + answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecord(cname)) }; //use ANAME + else + answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecord(cname)) }; + + return Task.FromResult(new DnsDatagram(request.Identifier, true, request.OPCODE, true, false, request.RecursionDesired, isRecursionAllowed, false, false, DnsResponseCode.NoError, request.Question, answers)); } #endregion