程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> System.Configuration中的BUG - 使用自定義配置節時出現的異常

System.Configuration中的BUG - 使用自定義配置節時出現的異常

編輯:關於.NET

發現當自定義應用程序配置節中出現樹型結構時將引發 “System.StackOverflowException” 類型異常.

程序集: System.Configuration, Version=2.0.0.0

例: 使用NodeElement(從ConfigurationElement派生)實現自定義配置節,

當獲取其屬性數據時出現"未處理的“System.StackOverflowException”類型的異常出現在 mscorlib.dll 中。".

代碼如下:

public class NodeElement : ConfigurationElement {
[ConfigurationProperty("text", IsRequired = true)]
public string Text {
get { return (string)this["text"]; }
}
[ConfigurationProperty("child")]
public NodeElement ChildElement {
get {
return (NodeElement)this["child"];
}
}
}
static class Program {
[STAThread]
static void Main() {
NodeElement node = new NodeElement();
object o = node.ChildElement; // 異常將出現在這裡
}
}

使用 .NET Reflector 查看 System.Configuration.ConfigurationElement 源代碼後發現,

當創建 ConfigurationProperty時缺少對屬性類型與其當前類型的對比判斷, 導致無限遞歸.

代碼如下:

private static ConfigurationProperty 
CreateConfigurationPropertyFromAttributes(PropertyInfo propertyInformation)
{
ConfigurationProperty property = null;
if (Attribute.GetCustomAttribute(propertyInformation, 
   typeof(ConfigurationPropertyAttribute)) is ConfigurationPropertyAttribute)
{
property = new ConfigurationProperty(propertyInformation);
}
//問題出現在下面這句判斷
//此處缺少對 property.Type 與當前其所屬類型的判斷
//導致 PropertiesFromType 方法無限遞歸.
if ((property != null) && 
   typeof(ConfigurationElement).IsAssignableFrom(property.Type))
{
ConfigurationPropertyCollection result = null;
PropertiesFromType(property.Type, out result);
}
return property;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved