You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2005/02/15 19:56:52 UTC

cvs commit: logging-log4net/src/Util/TypeConverters IPAddressConverter.cs

nicko       2005/02/15 10:56:52

  Modified:    src/Util/TypeConverters IPAddressConverter.cs
  Log:
  Only attempt to IPAddress.Parse if the string contains valid IP address characters
  
  Revision  Changes    Path
  1.3       +22 -11    logging-log4net/src/Util/TypeConverters/IPAddressConverter.cs
  
  Index: IPAddressConverter.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Util/TypeConverters/IPAddressConverter.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- IPAddressConverter.cs	7 Feb 2005 04:05:20 -0000	1.2
  +++ IPAddressConverter.cs	15 Feb 2005 18:56:52 -0000	1.3
  @@ -2,15 +2,15 @@
   //
   // Copyright 2001-2005 The Apache Software Foundation
   //
  -// Licensed under the Apache License, Version 2.0 (the "License");
  +// Licensed under the Apache License',' Version 2.0 (the "License");
   // you may not use this file except in compliance with the License.
   // You may obtain a copy of the License at
   //
   // http://www.apache.org/licenses/LICENSE-2.0
   //
  -// Unless required by applicable law or agreed to in writing, software
  -// distributed under the License is distributed on an "AS IS" BASIS,
  -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  +// Unless required by applicable law or agreed to in writing',' software
  +// distributed under the License is distributed on an "AS IS" BASIS','
  +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND',' either express or implied.
   // See the License for the specific language governing permissions and
   // limitations under the License.
   //
  @@ -72,19 +72,25 @@
   		public object ConvertFrom(object source) 
   		{
   			string str = source as string;
  -			if (str != null) 
  +			if (str != null && str.Length > 0) 
   			{
   				try
   				{
  -					try
  +					// Check if the string only contains IP address valid chars
  +					if (str.Trim(validIpAddressChars).Length == 0)
   					{
  -						return IPAddress.Parse(str);
  -					}
  -					catch(FormatException)
  -					{
  -						// Ignore a FormatException, try to resolve via DNS
  +						try
  +						{
  +							// try to parse the string as an IP address
  +							return IPAddress.Parse(str);
  +						}
  +						catch(FormatException)
  +						{
  +							// Ignore a FormatException, try to resolve via DNS
  +						}
   					}
   
  +					// Try to resolve via DNS. This is a blocking call.
   					IPHostEntry host = Dns.GetHostByName(str);
   					if (host != null && 
   						host.AddressList != null && 
  @@ -103,5 +109,10 @@
   		}
   
   		#endregion
  +
  +		/// <summary>
  +		/// Valid characters in an IPv4 or IPv6 address string. (Does not support subnets)
  +		/// </summary>
  +		private static readonly char[] validIpAddressChars = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F','x','X','.',':','%'};
   	}
   }