【发布时间】:2014-03-23 04:20:53
【问题描述】:
我们最近运行的 VeraCode 指出了以下方法:
public XmlElement RunProcedureXmlElement(string Procedure, List<SqlParameter> Parameters)
{
DataSet ds = RunProcedureDataSet(Procedure, Parameters);
XmlDocument xmlDoc = new XmlDocument();
StringBuilder strXML = new StringBuilder();
foreach (DataTable dt in ds.Tables)
{
foreach (DataRow dr in dt.Rows)
{
strXML.Append(dr[0]); // Do I still need .ToString()???
}
}
if (strXML.Length == 0) strXML.Append("<root total=\"0\"></root>");
try
{
xmlDoc.LoadXml(strXML.ToString());
}
catch (XmlException e)
{
}
return xmlDoc.DocumentElement;
}
什么是修复该方法的好解决方案,以便 VeraCode 停止抱怨?
谢谢
【问题讨论】:
-
这是 C#,对吧?适当地标记会很有帮助,因为解决这个问题(通过禁止文档提供自己的 DTD)需要了解平台的 XML API。
-
啊——我看到你已经禁止 DTD 处理了。那么,听起来像是 VeraCode 中的一个错误;我会把它带给他们。
-
我放了 DtdProcessing.Prohibit 来修复它。我以前没有。所以,VeraCode 没有问题。 VeraCode 指向我的方法开始的那一行。我想知道您是否知道 VeraCode 可以抱怨此方法中的哪一行?是我附加“”的地方吗?如果是,我可以替换它吗?或者它只是因为我没有处理 TD 处理而抱怨?
-
作为客户,您可以像公司以外的任何人一样访问文档——但是如果我正在编写一个静态分析器来寻找这个特定的问题,我会寻找
Load()和LoadXml()调用来触发此特定分析。 -
谢谢查尔斯。那么,基本上,放置 DtdProcessing.Prohibit 就足以解决这个问题了?