[Connection][WiFi] Fix System.FormatException when parsing IPAddress 25/148225/1
authorchleun.moon <chleun.moon@samsung.com>
Thu, 7 Sep 2017 06:54:54 +0000 (15:54 +0900)
committerchleun.moon <chleun.moon@samsung.com>
Thu, 7 Sep 2017 06:55:01 +0000 (15:55 +0900)
System.Net.IPAddress.Parse() cannot parse an empty string.
If empty string is delivered from native capi, it is replaced with
"0.0.0.0" for IPv4 or "::" for IPv6.

Change-Id: Id4d7c98f9b44e827d904372e8823cdd174e54687
Signed-off-by: cheoleun <chleun.moon@samsung.com>
src/Tizen.Network.Connection/Tizen.Network.Connection/ConnectionInternalManager.cs
src/Tizen.Network.Connection/Tizen.Network.Connection/IAddressInformation.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAddressInformation.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetwork.cs

index 3563334..f9aa0be 100755 (executable)
@@ -413,7 +413,15 @@ namespace Tizen.Network.Connection
 
             string result = Marshal.PtrToStringAnsi(ip);
             Interop.Libc.Free(ip);
-            return System.Net.IPAddress.Parse(result);;
+            Log.Debug(Globals.LogTag, "IPAddress " + result + " (" + result.Length + ")");
+            if (result.Length == 0)
+            {
+                if (family == AddressFamily.IPv4)
+                    return System.Net.IPAddress.Parse("0.0.0.0");
+                else
+                    return System.Net.IPAddress.Parse("::");
+            }
+            return System.Net.IPAddress.Parse(result);
         }
 
         internal IEnumerable<System.Net.IPAddress> GetAllIPv6Addresses(ConnectionType type)
@@ -425,7 +433,10 @@ namespace Tizen.Network.Connection
                 if (ipv6Address != IntPtr.Zero)
                 {
                     string ipv6 = Marshal.PtrToStringAnsi(ipv6Address);
-                    ipList.Add(System.Net.IPAddress.Parse(ipv6));
+                    if (ipv6.Length == 0)
+                        ipList.Add(System.Net.IPAddress.Parse("::"));
+                    else
+                        ipList.Add(System.Net.IPAddress.Parse(ipv6));
                     return true;
                 }
                 return false;
index fa8ab46..ee0882a 100755 (executable)
@@ -140,7 +140,7 @@ namespace Tizen.Network.Connection
                 }
                 string result = Marshal.PtrToStringAnsi(Value);
                 Interop.Libc.Free(Value);
-                if (result == null)
+                if (result == null || result.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(result);
             }
@@ -169,7 +169,7 @@ namespace Tizen.Network.Connection
                 }
                 string result = Marshal.PtrToStringAnsi(Value);
                 Interop.Libc.Free(Value);
-                if (result == null)
+                if (result == null || result.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(result);
             }
@@ -199,7 +199,7 @@ namespace Tizen.Network.Connection
                 }
                 string result = Marshal.PtrToStringAnsi(Value);
                 Interop.Libc.Free(Value);
-                if (result == null)
+                if (result == null || result.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(result);
             }
@@ -230,7 +230,7 @@ namespace Tizen.Network.Connection
                 }
                 string result = Marshal.PtrToStringAnsi(Value);
                 Interop.Libc.Free(Value);
-                if (result == null)
+                if (result == null || result.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(result);
             }
@@ -261,7 +261,7 @@ namespace Tizen.Network.Connection
                 }
                 string result = Marshal.PtrToStringAnsi(Value);
                 Interop.Libc.Free(Value);
-                if (result == null)
+                if (result == null || result.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(result);
             }
@@ -368,7 +368,7 @@ namespace Tizen.Network.Connection
                     Log.Error(Globals.LogTag, "It failed to get the DHCP server address, " + (ConnectionError)ret);
                 }
 
-                if (dhcpServer == null)
+                if (dhcpServer == null || dhcpServer.Length == 0)
                 {
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 }
index 03e8d37..07506f0 100755 (executable)
@@ -45,7 +45,7 @@ namespace Tizen.Network.WiFi
                 }
                 string addrStr = Marshal.PtrToStringAnsi(addrPtr);
                 Interop.Libc.Free(addrPtr);
-                if (addrStr == null)
+                if (addrStr == null || addrStr.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(addrStr);
             }
@@ -73,7 +73,7 @@ namespace Tizen.Network.WiFi
                 }
                 string addrStr = Marshal.PtrToStringAnsi(addrPtr);
                 Interop.Libc.Free(addrPtr);
-                if (addrStr == null)
+                if (addrStr == null || addrStr.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(addrStr);
             }
@@ -101,7 +101,7 @@ namespace Tizen.Network.WiFi
                 }
                 string addrStr = Marshal.PtrToStringAnsi(addrPtr);
                 Interop.Libc.Free(addrPtr);
-                if (addrStr == null)
+                if (addrStr == null || addrStr.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(addrStr);
             }
@@ -129,7 +129,7 @@ namespace Tizen.Network.WiFi
                 }
                 string addrStr = Marshal.PtrToStringAnsi(addrPtr);
                 Interop.Libc.Free(addrPtr);
-                if (addrStr == null)
+                if (addrStr == null || addrStr.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(addrStr);
             }
@@ -157,7 +157,7 @@ namespace Tizen.Network.WiFi
                 }
                 string addrStr = Marshal.PtrToStringAnsi(addrPtr);
                 Interop.Libc.Free(addrPtr);
-                if (addrStr == null)
+                if (addrStr == null || addrStr.Length == 0)
                     return System.Net.IPAddress.Parse("0.0.0.0");
                 return System.Net.IPAddress.Parse(addrStr);
             }
@@ -258,7 +258,7 @@ namespace Tizen.Network.WiFi
                     Log.Error(Globals.LogTag, "Failed to get DHCP server address, Error - " + (WiFiError)ret);
                 }
 
-                if (dhcpServer == null)
+                if (dhcpServer == null || dhcpServer.Length == 0)
                 {
                     return IPAddress.Parse("0.0.0.0");
                 }
index 4e351b0..97e5189 100755 (executable)
@@ -323,7 +323,10 @@ namespace Tizen.Network.WiFi
                 if (ipv6Address != IntPtr.Zero)
                 {
                     string ipv6 = Marshal.PtrToStringAnsi(ipv6Address);
-                    ipList.Add(System.Net.IPAddress.Parse(ipv6));
+                    if (ipv6.Length == 0)
+                        ipList.Add(System.Net.IPAddress.Parse("::"));
+                    else
+                        ipList.Add(System.Net.IPAddress.Parse(ipv6));
                     return true;
                 }
                 return false;