Only attempt to IPAddress.Parse if the string contains valid IP address characters
Project: http://git-wip-us.apache.org/repos/asf/logging-log4net/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4net/commit/e8fd624d Tree: http://git-wip-us.apache.org/repos/asf/logging-log4net/tree/e8fd624d Diff: http://git-wip-us.apache.org/repos/asf/logging-log4net/diff/e8fd624d Branch: refs/heads/origin/trunk Commit: e8fd624d1e7832151c292bd235d2cc4e38356ed2 Parents: 3ad6acc Author: Nicko Cadell <ni...@apache.org> Authored: Tue Feb 15 18:56:52 2005 +0000 Committer: Nicko Cadell <ni...@apache.org> Committed: Tue Feb 15 18:56:52 2005 +0000 ---------------------------------------------------------------------- src/Util/TypeConverters/IPAddressConverter.cs | 33 ++++++++++++++-------- 1 file changed, 22 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/e8fd624d/src/Util/TypeConverters/IPAddressConverter.cs ---------------------------------------------------------------------- diff --git a/src/Util/TypeConverters/IPAddressConverter.cs b/src/Util/TypeConverters/IPAddressConverter.cs index 673f1c6..7e3896a 100755 --- a/src/Util/TypeConverters/IPAddressConverter.cs +++ b/src/Util/TypeConverters/IPAddressConverter.cs @@ -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 @@ namespace log4net.Util.TypeConverters 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 @@ namespace log4net.Util.TypeConverters } #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','.',':','%'}; } }