如何解决Checkmarx C# - Improper_Resource_Shutdown_or_Release
StringBuilder csvData = new StringBuilder();
StreamWriter fileWriter = new StreamWriter(filepath.ToString());
try
{
csvData.Append(Constants.CSVQuote);
csvData.Append(Constants.Code);
csvData.Append(Constants.CSVDelimiter);
csvData.Append(Constants.Description);
csvData.Append(Constants.CSVDelimiter);
csvData.Append(Constants.Comments);
csvData.Append(Constants.CSVQuote);
fileWriter.WriteLine(csvData);
csvData.Clear();
for( int i=0; i<StatusEntities.Count(); i++)
{
csvData.Append(Constants.CSVQuote);
csvData.Append(StatusEntities[i].Code != null ? Common.ToCSVString(StatusEntities[i].Code) : string.Empty);
csvData.Append(Constants.CSVDelimiter);
csvData.Append(StatusEntities[i].Description != null ? Common.ToCSVString(StatusEntities[i].Description) : string.Empty);
csvData.Append(Constants.CSVDelimiter);
csvData.Append(StatusEntities[i].Comments != null ? Common.ToCSVString(StatusEntities[i].Comments) : string.Empty);
csvData.Append(Constants.CSVQuote);
fileWriter.WriteLine(csvData);
csvData.Clear();
}
}
catch
{
throw;
}
finally
{
fileWriter.Close();
csvData = null;
}
我不断找回Improper_Resource_Shutdown_or_Release漏洞。 我曾尝试使用自动使用 try-with-resource 的隐式发布,但这也不起作用。 您能否就如何修复此类漏洞提供一些建议?
解决方法
Checkmarx 正在标记您的代码,因为您没有为 StringBuilder 和 StreamWriter 实例正确处理新的资源分配。您可以将资源分配移动到 Var ind =str.indexof("@")
块,然后在 try { }
块内添加以下代码:
finally { }
您需要将资源分配移动到 cvsData.Dispose();
fileWriter.Dispose();
块的原因是因为在分配过程中可能会抛出异常。尤其是下面这行:
try { }
例如,如果变量“filepath”无效,可能会引发异常。
或者,您可以将新的资源分配包装在 StreamWriter fileWriter = new StreamWriter(filepath.ToString());
块中,如下所示:
using(...) { }
这可确保资源在超出范围时(当您使用完它时)被正确处理,而无需您明确处理它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。